java - redirectview - redirectattributes spring mvc example
eliminar jsessionid en url reescribir en spring mvc (5)
Estoy usando Spring MVC y tengo un problema en jsessionid, lo que encontré es que jsessionid se inyecta en la url si las cookies no están habilitadas en el navegador y produce una url como esa:
http://localhost/categories;jsessionid=Bsls4aQFXA5RUDcmZKV5iw?cid=13001
En realidad, no hay problema con los navegadores, pero cuando Google rastrea mi sitio y parece que los rastreadores de Google no tienen cookies :), almacenan las URL de mi sitio de esa forma y mi sitio aparece en los resultados de búsqueda que tienen URL como las que contienen jsessionid.
En realidad, se está ejecutando sin problemas, pero prefiero que las URL aparezcan en los resultados de búsqueda de Google sin jsessionid.
¿Alguna ayuda?
La forma más fácil de deshacerse de jsessionid en su url es cambiar a etiqueta en la página de inicio de sesión donde está llamando a j_spring_security_check para
<c:url var="authUrl" value="/static/j_spring_security_check" />
<form action="${authUrl}" method="post">
Si no usas la etiqueta http de Spring.
Vaya al frijol de la aplicaciónFilterChain que define sus cadenas de filtros Spring.
Normalmente, tendrá un filtro llamado httpSessionContextIntegrationFilter o algo muy cercano, que se basa en la clase org.springframework.security.web.context.HttpSessionContextIntegrationFilter o lo hereda de él.
Añadir la propiedad:
<property name="securityContextRepository" ref="securityContextRepositoryNoJSession"/>
Y añada el frijol:
<bean id="securityContextRepositoryNoJSession" class="org.springframework.security.web.context.HttpSessionSecurityContextRepository">
<property name="disableUrlRewriting" value="true"/>
</bean>
Esto debería ser equivalente a establecer disable-url-rewriting en true
Spring se puede configurar para que no lo haga: ¿Por qué se agrega jsessionid a cada url?
Las aplicaciones web se pueden configurar para bloquearlo: http://randomcoder.org/articles/jsessionid-considered-harmful
Yo insertaría un filtro que si detecta un bot (como googlebot) usa una HttpServletResponse personalizada que reemplaza los métodos encodeUrl para simplemente devolver la URL en bruto. Si el filtro no detecta un bot, simplemente dejará que la cadena continúe, lo que debería permitir que la codificación url, etc., continúe según el valor predeterminado.
Al punto: simplemente no permita que su aplicación cree sesiones mientras los usuarios no inicien sesión ni realicen acciones POST. No llame a request.getSession()
o request.getSession(true)
. No cree ni administre beans de ámbito de sesión para usuarios que no hayan iniciado sesión. Asegúrese de que los marcos que está utilizando no creen sesiones innecesariamente sin que usted lo diga para hacerlo.
Si esto es realmente imposible debido a la forma en que está diseñada su aplicación o debido a las limitaciones / errores de los marcos (MVC) utilizados, entonces su mejor opción es redirigir las solicitudes de Googlebot a direcciones URL sin el identificador JSESSIONID. Puede usar el filtro de reescritura de URL de Tuckey para esto (que es, por ejemplo, la variante de Java del conocido mod_rewrite
de Apache HTTPD). Aquí hay un extracto de relevancia de su página de ejemplos de configuración .
Ocultar jsessionid para las solicitudes de googlebot.
<outbound-rule> <name>Strip URL Session ID''s</name> <note> Strip ;jsession=XXX from urls passed through response.encodeURL(). The characters ? and # are the only things we can use to find out where the jsessionid ends. The expression in ''from'' below contains three capture groups, the last two being optional. 1, everything before ;jesessionid 2, everything after ;jesessionid=XXX starting with a ? (to get the query string) up to # 3, everything ;jesessionid=XXX and optionally ?XXX starting with a # (to get the target) eg, from index.jsp;jsessionid=sss?qqq to index.jsp?qqq from index.jsp;jsessionid=sss?qqq#ttt to index.jsp?qqq#ttt from index.jsp;jsessionid=asdasdasdsadsadasd#dfds - index.jsp#dfds from u.jsp;jsessionid=wert.hg - u.jsp from /;jsessionid=tyu - / </note> <condition name="user-agent">googlebot</condition> <from>^(.*?)(?:/;jsessionid=[^/?#]*)?(/?[^#]*)?(#.*)?$</from> <to>$1$2$3</to> </outbound-rule>