Je travaille sur un projet avec les technologies suivantes:
Pendant que je le déploie sur le serveur Tomcat, un "JSESSIONID 456jghd787aa"
est ajouté à la fin de l'URL.
J'essayais de résoudre ceci mais je ne suis pas capable de le faire.
Pour Tomcat 7, ajoutez ceci au fichier web.xml.
<session-config>
<!-- Disables URL-based sessions (no more 'jsessionid' in the URL using Tomcat) -->
<tracking-mode>COOKIE</tracking-mode>
</session-config>
Le filtre suivant peut résoudre votre problème (from http://randomcoder.org/maven/site/randomcoder-website/cobertura/org.randomcoder.security.DisableUrlSessionFilter.html )
package com.companyname.projectname.web.filter;
import Java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;
/**
* Servlet filter which disables URL-encoded session identifiers.
*
* <pre>
* Copyright (c) 2006, Craig Condit. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* </pre>
*/
public class DisableUrlSessionFilter implements Filter {
/* private static Log logger = LogFactory.getLog(DisableUrlSessionFilter.class);
*/
/**
* Filters requests to disable URL-based session identifiers.
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// skip non-http requests
if (!(request instanceof HttpServletRequest)) {
chain.doFilter(request, response);
return;
}
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
// clear session if session id in URL
if (httpRequest.isRequestedSessionIdFromURL()) {
HttpSession session = httpRequest.getSession();
if (session != null) {
session.invalidate();
}
}
// wrap response to remove URL encoding
HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper(
httpResponse) {
@Override
public String encodeRedirectUrl(String url) {
return url;
}
@Override
public String encodeRedirectURL(String url) {
return url;
}
@Override
public String encodeUrl(String url) {
return url;
}
@Override
public String encodeURL(String url) {
return url;
}
};
// process next request in chain
chain.doFilter(request, wrappedResponse);
}
/**
* Unused.
*/
public void init(FilterConfig config) throws ServletException {
}
/**
* Unused.
*/
public void destroy() {
}
}
Tomcat 6, ajoutez disableURLRewriting = "true" dans votre fichier context.xml
Tomcat 7 et ServletFilter ont déjà été discutés
Ou par programme:
servletContext.setSessionTrackingModes (EnumSet.of (SessionTrackingMode.COOKIE));
Vous pouvez ajouter ces paramètres à votre balise http comme suit:
<http auto-config="false" disable-url-rewriting="true">
Vous voudrez le supprimer de Tomcat, comme d'autres l'ont suggéré, mais vous aurez toujours des problèmes avec l'ajout de Shiro à la fin des redirections si vous n'avez pas encore défini de cookie. Il y a deux tickets ouverts sur le problème:
https://issues.Apache.org/jira/browse/SHIRO-360
https://issues.Apache.org/jira/browse/SHIRO-361
J'ai essayé d'obtenir l'URL de Tuckey Re-write au travail et j'ai réussi (sorta) après un moment. Le problème est que Shiro n'appelle pas response.encodeURL () et ne déclenche donc pas les règles sortantes. J'ai pu rediriger les demandes entrantes pour supprimer l'identifiant de session avec ces deux règles:
<rule>
<note>Remove jsessionid from embedded urls - for urls WITH query parameters</note>
<from>^/(.*);JSESSIONID=.*[?](.*)$</from>
<to type="redirect">/$1?$2</to>
</rule>
<rule>
<note>Remove jsessionid from embedded urls - for urls WITHOUT query parameters</note>
<from>^/(.*);JSESSIONID=.*[^?]$</from>
<to type="redirect">/$1</to>
</rule>
Cela permet au moins de ne pas l'afficher dans le navigateur, mais cela ne résout pas complètement le problème, car l'ID de session a été envoyé sur l'URL et redirigé vers l'emplacement qui ne le contient pas. Ce serait mieux si cela ne se présentait jamais du tout.
METTRE À JOUR:
SHIRO-360 et SHIRO-361 ont été corrigés et le correctif est dans Shiro 1.3.0. Selon Brian Demers dans SHIRO-361:
Définissez
sessionManager.sessionIdUrlRewritingEnabled = false
pour désactiver l’ajout de JSESSIONID à l’URL.REMARQUE: si un utilisateur a désactivé les cookies, il ne pourra PAS se connecter s'il est désactivé.
Jetty WebappContext:
Set<SessionTrackingMode> trackingModes = new HashSet<>();
trackingModes.add(SessionTrackingMode.COOKIE);
context.getSessionHandler().getSessionManager().setSessionTrackingModes(trackingModes);
Si vous n'utilisez pas Servlet 3.0, vous pouvez également utiliser une règle de récapitulation PrettyFaces: http://ocpsoft.org/support/topic/url-rewrite-removing-the-jsessionid-from-the-url#post -410