2011-05-19 12 views
6

Utilizo Spring Security y el proxy Apache para una aplicación web. Cuando se usa el estándar mod_proxy, todo está bien, pero después de cambiar al proxy AJP aparece un problema con los redireccionamientos de seguridad de Spring.Seguridad de primavera y proxy AJP

Apache config:

<VirtualHost *:80> 
    ServerName domain.com 

    ProxyPass/ajp://localhost:8009/Context/ 
    ProxyPassReverse/ajp://localhost:8009/Context/ 
</VirtualHost> 

Cuando llamo http://domain.com/login veo un formulario de acceso.

Cuando envío el formulario voy a http://domain.com/auth y me autentico.

Entonces la primavera de Seguridad debe redirigir a http://domain.com/index pero vuelve a dirigir en lugar de http://domain.com/Context/index

¿Cómo puedo deshacerme de esa ruta de contexto? ¿Por qué Spring Security lo agrega a todos lados?

Hubo una pregunta similar en el sitio primavera de Seguridad pero nadie contestó:

http://forum.springsource.org/showthread.php?95141-Why-is-spring-security-including-the-context-path

P. S. Parece extraño que Google no encuentre nada más relacionado con este problema. ¿Soy el único que usa Spring Security + AJP? Tal vez es un patrón equivocado?

Solución:

<VirtualHost *:80> 
    ServerName domain.com 

    RewriteEngine on 
    RewriteRule ^/Context/(.*)$ /$1 [R=301] 

    ProxyPass/ajp://localhost:8009/Context/ 
    ProxyPassReverse/ajp://localhost:8009/Context/ 
</VirtualHost> 

Respuesta

4

Spring Security es consciente del contexto de aplicación web, lo que significa que sus redirecciones siempre se basarán en el contexto de aplicaciones Web actual. Esto es por diseño ya que su servidor de aplicaciones puede estar ejecutando varias aplicaciones web diferentes que no deberían interferir entre sí.

¿Ejecutas solo esta aplicación en tu servidor y tienes la posibilidad de implementarla como aplicación ROOT en Tomcat (por ejemplo, poniéndolo en webapps/ROOT/)? Esto eliminaría su prefijo de contexto y resolvería su problema.

Otra opción puede ser volver a escribir la URL de redireccionamiento en el servidor de la aplicación antes de pasarla al cliente, e. gramo. con an outbound-rule from org.tuckey's great URLRewriteFilter (como mod_rewrite, pero para aplicaciones web Java EE). Por supuesto, tendría que encargarse de ordenar los filtros correctamente en su web.xml, ya que Spring Security también usa filtros para su lógica.

+0

Gracias! Finalmente terminé con Apache mod_rewrite. Ver la actualización de mi pregunta. –

+0

¡Me alegro de que haya sido útil! –

Cuestiones relacionadas