2010-11-08 7 views
2

La balise form-login peut-elle utiliser des URL vers des ressources externes?Spring Security 3.0 form-login Transmission vers des ressources externes

Deux services Web s'exécutent dans des contextes d'application distincts [cas n ° 1]. Ils pourraient aussi être sur des machines séparées [Cas # 2].

Je souhaite que le premier service utilise Spring Security pour imposer l'authentification pour certaines méthodes. Je veux que le second service soit utilisé comme mécanisme d'authentification. Si une demande n'est pas authentifiée lorsqu'elle tente d'invoquer une méthode protégée sur le premier service, la demande doit être transmise au second service pour authentification.

Les deux services sont opérationnels. J'ai le premier service configuré et "fonctionnant" à l'exception de l'URL il transmet la demande à quand l'utilisateur n'est pas encore authentifié.

Si le premier service Web est situé au http://server1/community, Spring Security peut-il rediriger un utilisateur vers un autre service fonctionnant dans un contexte distinct?

Ex:

<security:form-login 
    login-page="/auth/login.jsp" /> 

/auth est le contexte du second service.

Ou, peut-il transférer vers un autre serveur?

<security:form-login 
    login-page="http://server2/auth/login.jsp" /> 

Quand j'ai essayé la première configuration ci-dessus, l'URL a été transmise à http://server1/community/auth/login.jsp est devenu. Je voulais http://server1/auth/login.jsp. La seconde configuration a donné http://server1/communityhttp://server2/auth/login.jsp. De toute évidence, les URL sont considérées comme relatives au contexte actuel. Y a-t-il un moyen de changer ce comportement? Ou, y a-t-il une meilleure façon de faire ce que j'essaie de faire et je n'ai tout simplement pas encore trébuché dessus?^__^

Nous vous remercions de votre aide!

- JS

PS: J'ai posté plus tôt comme une "réponse" à un post précédent par erreur. Pardon.

Répondre

1

Oui, il existe un moyen de faire ce que vous voulez. Le mot clé dont vous avez besoin est login-processing-url sur l'élément form-login.

Exemple:

<form-login login-page="/auth/login" login-processing-url="/auth/example_security_check"/> 

Puis dans votre page jsp que vous souhaitez définir l'action à tout ce que vous mettez là:

<form action="example_security_check" method="post"> 
    <label for="j_username">Login</label>: 
    <input id="j_username" name="j_username" size="20" maxlength="50" type="text"/> 
    <br/> 

    <label for="j_password">Password</label>: 
    <input id="j_password" name="j_password" size="20" maxlength="50" type="password"/> 
    <br/> 

    <input type="submit" value="Login"/> 
    <br/> 
    <br/> 

    <input id="_spring_security_remember_me" name="_spring_security_remember_me" type="checkbox" value="true"/> 
    <label for="_spring_security_remember_me">Remember Me?</label> 
</form> 

La documentation de l'attribut est ici

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-namespace.html

1

Je suppose que vous pouvez remplacer le LoginUrlAuthenticationEntryPoint de classe et au lieu d'utiliser la balise, vous ajoutez manuellement les éléments nécessaires à la configuration

Voir form-login doku pour les éléments requis. est seulement le nom d'utilisateur UsernamePasswordAuthenticationFilter et le LoginUrlAuthenticationEntryPoint. Je suppose que vous pouvez utiliser la balise de filtre personnalisé pour ajouter le filtre.