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

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

在本文中,将为大家说明如何结合Spring Security 管理web应用的会话。

一、Spring Security创建使用session的方法

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

  • 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 Security进行web应用会话安全管理_Spring Security_02

重要的是:该配置只能控制Spring Security如何创建与使用session,而不是控制整个应用程序。如果我们不明确指定,Spring Security可能不会创建session,但是我们的应用程序可能会创建session(一般spring应用的session管理交由Spring Session进行)!

二、会话超时管理

2.1 会话超时处理

会话超时之后,我们通常希望应用跳转到一个指定的URL,显示会话超时信息。可以使用如下的配置的代码实现。

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

2.2.会话超时时间配置

在Spring boot应用中有两种设置会话超时时间的方式,Spring Security对这两种方式完全兼容,即:当会话超时之后用户需要重新登录才能访问应用:

  • server.servlet.session.timeout=15m

  • spring.session.timeout = 15m

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

三、Spring Security的会话固化保护

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

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

如果这不是您需要的方式,则可以使用其他两个选项:

  • sessionFixation设置为“none”时,原始会话不会失效

  • sessionFixation设置“newSession”后,将新创建一个会话,并且不会复制旧会话中的任何属性

四、Cookie的安全

熟悉Session实现原理的朋友一定都知道,提高Cookies的安全性,实际上就是提高session的安全性。在Spring Boot中可以通过配置方式来实现:

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

  • httpOnly:如果为true,则浏览器脚本将无法访问cookie

  • secure:如果为true,则仅通过HTTPS连接发送cookie,HTTP无法携带cookie。

 
本号只做持续的知识输出,您的支持是我不竭的创作动力!让知识产生价值、让程序员改变世界!