在本文中,将为你们说明如何结合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