L'appel à la déconnexion de sécurité de J spring ne fonctionne pas

j'essaie de configurer le logut de mon application avec j_spring_security_logout mais pour une raison quelconque, cela ne fonctionne pas, j'obtiens toujours une erreur 404.

j'appelle la fonction comme ceci:

<a href="<c:url value="/j_spring_security_logout"/>"><img border="0" id="logout" src="./img/logout.png" /></a>

j'ai dans WebContent/jsp/ ma page principale d'application, et les pages de connexion et de déconnexion sont dans WebContent/login/.

j'ai aussi vérifié cet autre post problème avec le ressort sécurité logout mais la solution donnée il ne fonctionne pas pour moi.

ici vous pouvez voir mon web.xml

<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>
</filter-mapping>

et voici mon ressort-sécurité.xml

<http auto-config="true">
    <intercept-url pattern="/*" access="ROLE_USER" />
    <form-login login-page="/login/login.jsp" 
                authentication-failure-url="/login/errorLogin.jsp"/>
    <logout logout-success-url="/" logout-url="/login/logout.jsp" />
</http>

<beans:bean id="myAuthenticationProvider" 
    class="myapp.web.authentication.WSAuthenticationProvider">
</beans:bean>

<authentication-manager>
    <authentication-provider ref="myAuthenticationProvider"/>
</authentication-manager>

Merci d'avance.

20
demandé sur Community 2012-06-15 16:42:01

6 réponses

le logout-url se réfère à une URL virtuelle, vous n'avez pas besoin d'avoir une ressource de ce nom. Vous pouvez faire ceci:

<logout logout-success-url="/" logout-url="/j_spring_security_logout" />

et le lien sur votre page comme ceci

<c:url value="/j_spring_security_logout" var="logoutUrl" />
<a href="${logoutUrl}">Log Out</a>

ou ceci:

<logout logout-success-url="/" logout-url="/logout" />

et le lien suivant:

<c:url value="/logout" var="logoutUrl" />
<a href="${logoutUrl}">Log Out</a>

vous mélangiez les deux c'est pourquoi vous avez eu une erreur 404.

33
répondu Ravi 2012-06-16 08:23:59

vérifier si csrf est activé. Si csrf activé, besoin d'utiliser la méthode post pour se déconnecter, ajouter le jeton csrf comme champ caché. ensuite, utilisez JavaScript pour poster le formulaire de déconnexion

27
répondu Jason Hao 2014-06-05 08:10:32

avec sécurité de ressort 4 déconnexion doit être fait par le bouton de formulaire. Jeton CSRF doit être soumis. j_spring_security_logout ne fonctionne plus. Après avoir passé une journée, j'ai été suivi pour travailler.

Étape 1: dans votre page JSP

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}" method="post">
    <input type="submit" value="Logout"/>
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>

Étape 2

<security:http use-expressions="true">
<security:form-login login-page="/login" authentication-failure-url="/login?error=true" />
<security:logout logout-success-url="/login" invalidate-session="true" logout-url="/logout" />
</security:http>

Étape 3 dans votre contrôleur de connexion

//Logout mapping
@RequestMapping("/logout")
public String showLoggedout(){
    return "logout";
}

Étape 4 vous devez avoir une déconnexion.jsp

Important de voir qu'il va se poser sur la page de connexion après la déconnexion.

<security:form-login login-page="/login" authentication-failure-url="/login?error=true" />

ainsi cette page de connexion doit être là avec mappping correspondant à la connexion.jsp ou n'importe quoi pour mapper dans votre controller.

17
répondu vimal krishna 2016-04-04 18:57:10

indique aussi à quoi votre contrôleur devrait ressembler

@RequestMapping("/logout")
    public String logoutUrl(){
        return "logout";
    }
0
répondu Dwight Theodis Taylor 2016-07-08 00:32:25

premier ensemble de sécurité-contexte.xml le code suivant...

<security:logout logout-success-url="/"
            invalidate-session="true"  /> 

puis ajoutez ce code à votre fichier jsp..

  <script>
        function formSubmit() {
            document.getElementById("logoutForm").submit();
        }
    </script>


<c:url var="logoutUrl" value="/logout" />        
  <a href="javascript:formSubmit()"> Logout</a>
</li>

<form action="${logoutUrl}" method="post" id="logoutForm">
    <input type="hidden" name="${_csrf.parameterName}"     value="${_csrf.token}" />
</form>
0
répondu torikraju 2016-10-16 19:38:58

dans la config MVC de printemps basée sur JAVA, vous devez le configurer dans votre classe de config de sécurité:

@Override
protected void configure(HttpSecurity http) throws Exception {
    super.configure(http);
    http.servletApi().rolePrefix("");
    http
      .logout()
          .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}

Cette réponse est doublé, et travaille sur mon cas: Printemps de Sécurité Java Config ne générant pas d'url de déconnexion

0
répondu Krystian 2017-05-23 11:55:16