example cerrar spring security logout

cerrar - spring security logout 404



La llamada a j_spring_security_logout no funciona (6)

Estoy intentando configurar el inicio de sesión de mi aplicación con j_spring_security_logout pero por alguna razón no funciona, sigo recibiendo un error 404.

Estoy llamando a la función así:

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

Tengo en la página principal de WebContent / jsp / my application, y las páginas de inicio y cierre de sesión están en WebContent / login /.

También he revisado este otro post Problema con el cierre de sesión de seguridad de Spring, pero la solución dada no funciona para mí.

Aquí puedes ver mi 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>

Y aquí mi spring-security.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>

Gracias por adelantado.


Con Spring Security 4 Logout se debe hacer a través del botón de formulario. El token CSRF tiene que ser enviado a lo largo. j_spring_security_logout ya no funciona. Después de pasar un día conseguí seguir trabajando.
Paso 1: En tu página 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>

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

Paso 3 en su controlador de inicio de sesión

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

Paso 4 Debes tener un logout.jsp

Importante para ver que aterrizará en la página de inicio de sesión después de cerrar la sesión.

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

Así que esta página de inicio de sesión debe estar allí con la asignación correspondiente a login.jsp o lo que sea que se asigne en su controlador.


En la configuración Spring MVC BASADA EN JAVA, debe configurarla en su clase de configuración de seguridad:

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

Esta respuesta se ha duplicado y está trabajando en mi caso: Spring Security Java Config no genera URL de cierre de sesión


Primero establezca security-context.xml el siguiente código ...

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

a continuación, agregue este código a su archivo 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>


También aquí es cómo debe verse tu controlador

@RequestMapping("/logout") public String logoutUrl(){ return "logout"; }


compruebe si csrf está habilitado. Si csrf está habilitado, debe usar el método de publicación para cerrar sesión, agregue el token csrf como campo oculto. luego usa JavaScript para publicar el formulario para cerrar sesión


logout-url se refiere a una URL virtual, no necesita tener ningún recurso con ese nombre. Puedes hacer esto:

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

y el enlace en tu pagina como este

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

O esto:

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

y el siguiente enlace:

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

Estabas mezclando tanto por eso recibías un error 404.