结合Spring Security进行web应用会话安全管理

file

在本文中,将为你们说明如何结合Spring Security 和Spring Session管理web应用的会话。html

1、Spring Security建立使用session的方法

Spring Security提供4种方式精确的控制会话的建立:web

  • always:若是当前请求没有session存在,Spring Security建立一个session。
  • ifRequired(默认): Spring Security在须要时才建立session
  • never: Spring Security将永远不会主动建立session,可是若是session已经存在,它将使用该session
  • stateless:Spring Security不会建立或使用任何session。适合于接口型的无状态应用,该方式节省资源。

在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进行)!浏览器

2、会话超时管理

2.1 会话超时处理

会话超时以后,咱们一般但愿应用跳转到一个指定的URL,显示会话超时信息。可使用以下的配置的代码实现。安全

http.sessionManagement()
          .expiredUrl("/sessionExpired.html")   //超时session
          .invalidSessionUrl("/invalidSession.html");    //非法session

2.2.会话超时时间配置

在Spring boot应用中有两种设置会话超时时间的方式,Spring Security对这两种方式彻底兼容,即:当会话超时以后用户须要从新登陆才能访问应用:springboot

  • server.servlet.session.timeout=15m
  • spring.session.timeout = 15m

第一种方式是springBoot应用自带的session超时配置,第二种方式是咱们使用Spring Session以后,提供的session超时配置。第二种方式的优先级更高。cookie

3、Spring Security的会话固化保护

session-fixation-protection 即session的固化保护功能,该功能的目的是必定程度上防止非法用户窃取用户session及cookies信息,进而模拟session的行为。 默认状况下,Spring Security启用了migrationSession保护方式。即对于同一个cookies的SESSIONID用户,每次登陆验证将建立一个新的HTTP会话,旧的HTTP会话将无效,而且旧会话的属性将被复制。session

http.sessionManagement() .sessionFixation().migrateSession()

若是这不是您须要的方式,则可使用其余两个选项:less

  • 设置为“none”时,原始会话不会无效
  • 设置“newSession”后,将建立一个干净的会话,而不会复制旧会话中的任何属性

4、Cookie的安全

熟悉Session实现原理的朋友必定都知道,提升Cookies的安全性,实际上就是提升session的安全性。在Spring Boot中能够经过配置方式来实现:ide

server.servlet.session.cookie.http-only=true
server.servlet.session.cookie.secure=true
  • httpOnly:若是为true,则浏览器脚本将没法访问cookie
  • secure:若是为true,则仅经过HTTPS链接发送cookie,HTTP没法携带cookie。

期待您的关注

相关文章
相关标签/搜索