2015-04-09 2 views
5

Secondo Spring Security 4.0.0 documento:Primavera

4.2.4 Logout Handling

L'elemento di disconnessione aggiunge il supporto per la disconnessione navigando a un particolare URL . L'URL di logout predefinito è/logout, ma è possibile impostarlo su in altro modo utilizzando l'attributo logout-url. Ulteriori informazioni su altri attributi disponibili possono essere trovate nell'appendice dello spazio dei nomi.

Tuttavia, dopo aver seguito le impostazioni di sicurezza nel documento, l'URL/logout non mostra la pagina di disconnessione. Invece, mostra

enter image description here

Al contrario, l'URL/login funziona correttamente.

enter image description here

Quello che segue è la mia impostazione:

Spring Framework 4.1.6
Primavera di sicurezza 4.0.0

Web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
    <display-name>Test8</display-name> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
     <welcome-file>index.htm</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>default.html</welcome-file> 
     <welcome-file>default.htm</welcome-file> 
     <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

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

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/security-config.xml</param-value> 
    </context-param> 


</web-app> 

sicurezza-config.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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.xsd"> 
    <http> 
     <intercept-url pattern="/**" access="hasRole('USER')" /> 
     <form-login /> 
     <logout /> 
    </http> 

    <authentication-manager> 
     <authentication-provider> 
      <user-service> 
       <user name="aaa" password="111" authorities="ROLE_USER, ROLE_ADMIN" /> 
       <user name="bbb" password="222" authorities="ROLE_USER" /> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 

</beans:beans> 
+0

http://www.codeproject.com/Tips/521847/Logout-Spring-s-LogoutFilter può questo ti aiuta? – OhadR

+0

Sto affrontando lo stesso problema nella mia applicazione. Ha funzionato bene con la versione 3.2.7, e da quando ho aggiornato alla 4.0.1 non esiste più alcuna mappatura per/URL di uscita. – yglodt

risposta

0

Si noti che non esiste una "pagina di disconnessione". il/logout è l'endpoint di Spring, che fa sapere a Spring che l'app chiede di disconnettersi da un utente, quindi invoca un gestore specifico.

Dopo aver disconnesso l'utente, Spring reindirizza a un'altra pagina e puoi configurare il "target predefinito" nel tuo XML.

1

Semplicemente, inserire il seguente codice nella jsp in cui si desidera avere la logout-

<c:url var="logoutUrl" value="/j_spring_security_logout" /> 
    <form action="${logoutUrl}" id="logout" method="post"> 
     <input type="hidden" name="${_csrf.parameterName}" 
      value="${_csrf.token}" /> 
    </form> 
    <a href="#" onclick="document.getElementById('logout').submit();">Logout</a> 

voce corrispondente nella configurazione di fagioli file-

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

- Questo ha funzionato per me per la sicurezza di primavera-4.*

0

Aggiungi a Primavera di sicurezza:

<logout 
logout-success-url="/anonymous.html" 
logout-url="/perform_logout" 
delete-cookies="JSESSIONID" /> 

sotto http tag

0
@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

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