2011-07-14 4 views
4

Je suis nouveau à la sécurité de printemps. J'ai créé un exemple dans la sécurité de printemps 3.Spring Security 3 Déconnexion ne fonctionne pas

Je suis confronté à un problème. Je suis capable de se connecter avec succès la page de connexion par défaut, mais quand je LOGOUT, je suis avec succès redirigée à mon loggedout.jsp mais quand vérifier avec l'URL altérant je vois que je suis toujours connecté

Le printemps security.xml.

<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

    <http pattern="/loggedout.jsp" security="none" /> 

    <http auto-config='true'> 
     <intercept-url pattern="/**" access="ROLE_USER" /> 
     <logout logout-success-url="/loggedout.jsp" invalidate-session="true" 
      delete-cookies="JSESSIONID" /> 

     <!-- <remember-me key="myAppKey" /> --> 
     <!-- <session-management invalid-session-url="/timeout.jsp"> 
      <concurrency-control max-sessions="1" 
       error-if-maximum-exceeded="true" /> 
     </session-management> --> 
    </http> 

    <authentication-manager> 
     <authentication-provider> 
      <user-service> 
       <user name="vrajesh" password="vrajesh" 
        authorities="ROLE_USER,ROLE_ADMIN" /> 
       <user name="test" password="test" 
        authorities="ROLE_USER,ROLE_ADMIN" /> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 

    <!-- 
     <http pattern="/loggedout.jsp" security="none"/> 
     <http use-expressions="true"> 
      <intercept-url pattern="/**" access="ROLE_USER" /> 
      <form-login /> 
      <logout logout-success-url="/loggedout.jsp" 
       delete-cookies="JSESSIONID"/> 
      <remember-me /> 
      <session-management invalid-session-url="/timeout.jsp"> 
       <concurrency-control max-sessions="1" 
        error-if-maximum-exceeded="true" /> 
      </session-management> 
     </http> 
    --> 

</beans:beans> 

Ceci est mon lien de déconnexion sur chaque page:

<p><a href="j_spring_security_logout">Logout</a></p> 

et ceci est mon loggedout.jsp:

<p> 
You have been logged out. <a href="<c:url value='/'/>">Start again</a>. 
</p> 

Dans mon loggedout.jsp, si je clique sur le lien «Recommencer», il devrait afficher la page de connexion, mais ce n'est pas le cas. Au lieu de cela, je suis connecté à l'application.

Aidez-moi s'il vous plaît et laissez-moi savoir si je manque quelque chose.

+0

Veuillez corriger le code HTML que vous envoyez et clarifiez le fichier de configuration que vous utilisez. Veuillez également clarifier le lien "recommencer". Avez-vous activé la journalisation DEBUG? –

+1

Avez-vous confirmé que vous êtes toujours connecté à l'application et que vous ne voyez pas seulement une version mise en cache par le navigateur de la page? – atrain

Répondre

0

J'ai eu problème lors du référencement j_spring_security_logout, donc je l'ai fait:

1.- spring-security.xml ajouté à la section:

<logout logout-url="/logout.html"/> 

2.- Dans mon contrôleur Je viens d'avoir:

@RequestMapping(value = "logout.html", method = RequestMethod.GET) 
    public String logout(ModelMap model, HttpServletRequest request) { 
     return "loginform"; 
    } 

3.- Dans mon .jsp:

<a href="${pageContext.request.contextPath}/logout.html"><fmt:message key="text.exit" /></a> 

Et cela fonctionne parfaitement :)

Vous pouvez vérifier les configurations supplémentaires here de fermeture de session.

4

Votre lien de déconnexion sur chaque page doit être:

<p><a href="/j_spring_security_logout">Logout</a></p> 
Questions connexes