Réécriture du printemps de sécurité de l'Url de redirection
J'essaie de Tuckey UrlRewriteFilter pour ranger les Url pour ma webapp. Un problème que j'ai c'est que quand le printemps-avis de sécurité qu'un anonyme, un utilisateur tente d'accéder à une ressource protégée, elle redirige vers une URL qui comprend le chemin de la servlet.
Ce que j'aimerais c'est, par exemple:
> GET http://localhost:8080/my-context/protected-resource
< Location: http://localhost:8080/my-context/login
Ce que j'ai actuellement est:
> GET http://localhost:8080/my-context/protected-resource
< Location: http://localhost:8080/my-context/-/login
Documents pertinents que j'ai trouvé jusqu'à présent:
DefaultRedirectStrategy, qui effectue la redirection en question: http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/web/DefaultRedirectStrategy.html. Il a un contextRelative propriété qui est tentant, mais je ne pense pas aller à le couper, si je peux même trouver un moyen de le configurer.
Un billet de blog qui a aidé à obtenir de moi ce jour: http://nonrepeatable.blogspot.com/2009/11/using-spring-security-with-tuckey.html
Ce que j'aimerais savoir, c'est:
- Peux/dois-je convaincre Tuckey de réécrire l'Emplacement de l'en-tête. <sortant de la règle> ne semble pas aider tout ici.
- Peut/doit j'ai un peu bidouiller les SS config à émettre l'URL réécrite. Je ne pense pas que cela est tout aussi bien rangé, comme il avait briser si réécriture a été désactivé.
web.xml
ressemble
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>LogLevel</param-name>
<param-value>log4j</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>my-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>psms</servlet-name>
<url-pattern>/-/*</url-pattern>
</servlet-mapping>
urlrewrite.xml
ressemble:
<urlrewrite>
<rule>
<from>^/(.*)$</from>
<to>/-/$1</to>
</rule>
</urlrewrite>
applicationContent-security.xml
ressemble:
<http auto-config="true">
<!-- allow GET requests to /login without authentication -->
<intercept-url pattern="/-/login" method="GET" filters="none"/>
<intercept-url pattern="/-/admin/**" access="ROLE_ADMIN"/>
<intercept-url pattern="/-/**" access="ROLE_USER"/>
<form-login login-page="/-/login"
login-processing-url="/-/login.do"
authentication-failure-url="/-/login?login_error"
default-target-url="/-/index"
always-use-default-target="true"/>
<logout logout-url="/-/logout"
logout-success-url="/-/login"/>
<access-denied-handler error-page="/-/access-denied"/>
</http>
- et le réglage de la page d'identification de l'attribut /login?
Vous devez vous connecter pour publier un commentaire.
J'ai regardé dans cette question pour notre projet de l'année dernière et à l'époque, le problème était que Tucky ne coopérait pas avec la réponse.encodeRedirectUrl() pour réécrire les Url de redirection. Je les ai contactés, mais je n'ai pas suivi sur ce point.
Ma solution a été de permettre le désordre URL pour aller vers le client, mais ensuite nettoyer avec un Tucky rediriger la règle (une seconde de redirection).
Donc ajouter une autre règle qui correspond à votre laide URL de la sécurité de redirection et d'émettre votre propre rediriger vers l'URL "propre":
Oui, il implique deux redirections, mais le client ne sera jamais le voir... ce qui est probablement le point.
Printemps de sécurité est en train de faire la redirection avec une URL absolue comme
http://example.org/-/login
Essayez d'utiliser un émetteur-règle sans la
^ start of string
marqueur pour correspondre à l'url absolue généré par le printemps.J'ai rencontré le même problème, mais il semble corrigé dans la version 3.2.0 de Tuckey.
c'est à dire la réponse.encodeRedirectUrl() est maintenant enveloppé par Tuckeys UrlRewriteWrappedResponse où la règle de trafic sortant de l'exécution a lieu.
Je v jamais utilisé Tuckey, mais après un rapide coup d'oeil à la documentation, je voudrais essayer d'ajouter une règle pour la connexion de cas:
MODIFIER
Ok, et quelque chose comme ceci: