在本文中,將爲你們說明如何結合Spring Security 和Spring Session管理web應用的會話。html
Spring Security提供4種方式精確的控制會話的建立:web
在Spring Security配置中加入session建立的策略。繼承WebSecurityConfigurerAdapter ,重寫configure(HttpSecurity http) 方法spring
@Override protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .sessionCreationPolicy( SessionCreationPolicy.IF_REQUIRED ) }
重要的是:該配置只能控制Spring Security如何建立與使用session,而不是控制整個應用程序。若是咱們不明確指定,Spring Security可能不會建立session,可是咱們的應用程序可能會建立session(通常spring應用的session管理交由Spring Session進行)!瀏覽器
會話超時以後,咱們一般但願應用跳轉到一個指定的URL,顯示會話超時信息。可使用以下的配置的代碼實現。安全
http.sessionManagement() .expiredUrl("/sessionExpired.html") //超時session .invalidSessionUrl("/invalidSession.html"); //非法session
在Spring boot應用中有兩種設置會話超時時間的方式,Spring Security對這兩種方式徹底兼容,即:當會話超時以後用戶須要從新登陸才能訪問應用:springboot
第一種方式是springBoot應用自帶的session超時配置,第二種方式是咱們使用Spring Session以後,提供的session超時配置。第二種方式的優先級更高。cookie
session-fixation-protection 即session的固化保護功能,該功能的目的是必定程度上防止非法用戶竊取用戶session及cookies信息,進而模擬session的行爲。 默認狀況下,Spring Security啓用了migrationSession保護方式。即對於同一個cookies的SESSIONID用戶,每次登陸驗證將建立一個新的HTTP會話,舊的HTTP會話將無效,而且舊會話的屬性將被複制。session
http.sessionManagement() .sessionFixation().migrateSession()
若是這不是您須要的方式,則可使用其餘兩個選項:less
熟悉Session實現原理的朋友必定都知道,提升Cookies的安全性,實際上就是提升session的安全性。在Spring Boot中能夠經過配置方式來實現:ide
server.servlet.session.cookie.http-only=true server.servlet.session.cookie.secure=true