7
votes

Réécrire les URL de redirection de Spring-Security

J'essaie d'obtenir Tuckey Urrrewritefilter pour ranger les URL pour mon webApp. Un problème que j'ai obtenu est que lorsque Spring-Security remarque qu'un utilisateur anonyme tente d'accéder à une ressource protégée, il redirige vers une URL qui inclut le chemin de servlet.

Ce que je voudrais, c'est, par exemple: p> xxx pré>

Qu'est-ce que je reçois actuellement est: p> xxx pré>

documents pertinents que j'ai trouvés jusqu'à présent: p>

Defaultredirectstrategy, qui fait le réorientation réelle en question: http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/web/defaultreprateStrategy.html . Il a une propriété contextrale qui est tentante mais je ne pense pas que je vais le couper, si je peux même trouver un moyen de la configurer. P>

Un poteau de blog qui a aidé à me faire aussi loin: http://nonrepeatable.blogspot.com/2009/11/ Utilisation-Spring-Security-with-tuckey.html P>

Qu'est-ce que j'aimerais savoir est: p>

  1. peut / dois-je convaincre Tuckey de réécrire l'en-tête de localisation. ne semble rien aider ici. Li>
  2. peut / dois-je modifier en quelque sorte la configuration SS pour émettre l'URL de réécriture. Je ne pense pas que cela soit aussi bien rangé, car il se cassait si la réécriture était handicapée. Li> ol>

    web.xml code> ressemble à p> xxx pré>

    urlrewrite.xml code> ressemble à: p >

    <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>
    


1 commentaires

et régler l'attribut de la page de connexion à / Connexion?


4 Réponses :


0
votes

Je n'ai jamais utilisé de tuckey, mais après un regard rapide sur la documentation, j'essaierais d'ajouter une règle pour le boîtier de connexion: xxx

edit
Ok, et quelque chose comme ceci: xxx


1 commentaires

Le problème n'est pas que des demandes entrantes ne sont pas réécrites, mais plutôt que des en-têtes d'emplacement sortant dans le cadre d'une redirection ne sont pas réécrites. Depuis depuis, j'ai parcouru qu'une règle sortante avec le protocole complet, l'hôte, le port, le contexte, etc. attrapera l'en-tête de localisation, mais cela n'est pas génial non plus.



2
votes

J'ai examiné cette question pour notre projet l'année dernière et, à ce moment-là, le problème était que Tucky ne coopérait pas avec Response.encoderedirecturl () pour réécrire les URL de redirection. Je les ai contactés mais je n'ai pas suivi à ce sujet.

Ma solution consistait à permettre à l'URL désordonnée de revenir au client, mais puis de le nettoyer avec une règle de redirection tunchy (une seconde redirection).

Ajoutez une autre règle correspondant à votre URL laid de la sécurité redirige et émettez votre propre redirection à l'URL propre: xxx

Oui, il implique deux redirections, mais la Le client ne le verra jamais ... ce qui est probablement le point.


0 commentaires

1
votes

Sécurité de printemps fait la redirection avec une URL absolue comme http://example.org/-/login code>

essayer d'utiliser une règle sortante sans le ^ Début de String Code> Marqueur pour correspondre à l'URL absolue générée par le ressort. P>

<outbound-rule>
    <from>/-/login(.*)$</from>
    <to>/login$1</to>
</outbound-rule>    


0 commentaires

1
votes

J'ai couru dans le même problème, mais cela semble fixé dans la version 3.2.0 de Tuckey. c'est-à-dire la réponse.encoderedirecturl () est maintenant enveloppé par Tuckeys UrrrewriteWrappeResponse où l'exécution de la règle sortante a lieu.


0 commentaires