结合Spring Security进行web应用会话安全管理
在本文中,将为大家说明如何结合spring security 和spring session管理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) 方法
@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.1 会话超时处理
会话超时之后,我们通常希望应用跳转到一个指定的url,显示会话超时信息。可以使用如下的配置的代码实现。
http.sessionmanagement() .expiredurl("/sessionexpired.html") //超时session .invalidsessionurl("/invalidsession.html"); //非法session
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会话将无效,并且旧会话的属性将被复制。
http.sessionmanagement() .sessionfixation().migratesession()
如果这不是您需要的方式,则可以使用其他两个选项:
- 设置为“none”时,原始会话不会无效
- 设置“newsession”后,将创建一个干净的会话,而不会复制旧会话中的任何属性
四、cookie的安全
熟悉session实现原理的朋友一定都知道,提高cookies的安全性,实际上就是提高session的安全性。在spring boot中可以通过配置方式来实现:
server.servlet.session.cookie.http-only=true server.servlet.session.cookie.secure=true
- httponly:如果为true,则浏览器脚本将无法访问cookie
-
secure:如果为true,则仅通过https连接发送cookie,http无法携带cookie。
期待您的关注
- 博主最近新写了一本书:《手摸手教您学习springboot系列-16章97节》
本文转载注明出处(必须带连接,不能只转文字):。
上一篇: 吃番茄会瘦吗,想知道多的过来看看
下一篇: 圆明园兽首有哪些?已经回归的七尊是什么?