spring boot整合 spring security之会话管理
Posted 健康平安的活着
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot整合 spring security之会话管理相关的知识,希望对你有一定的参考价值。
一 会话
1.1 做会话原因
用户认证通过后,为了避免用
户的每次操作都进行认证可将用户的信息保存在会话中
。
1.2 实现会话的原理
1.spring security
提供会话管 理,认证通过后将身份信息放
入SecurityContextHolder
上下文,
SecurityContext与当前线程进行绑定,方便获取 用户身份。
2.Spring Security获取当前登录用户信息的方法为:
SecurityContextHolder.getContext().getAuthentication()
二 案例操作
本案例操作是在上一篇工程的基础上进行操作。
2.1 获取当前登录用户的信息
在controller中进行获取
//获取当前用户信息
private String getCurrentOnlineUsername(){
String username = null;
//当前认证通过的用户身份
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
//用户身份
Object principal = authentication.getPrincipal();
if(principal == null){
username = "匿名";
}
if(principal instanceof UserDetails){
UserDetails userDetails = (UserDetails) principal;
username = userDetails.getUsername();
}else{
username = principal.toString();
}
return username;
}
2.2 在访问资源的方法上获取登录用户
还是在controller上,针对获取资源的方法上,获取当前登录的用户信息,进行逻辑判断,如
loginSuccess()、r1、r2方法上
2.3 设置每个登录成功用户设置一个session
默认情况下,Spring Security会为每个登录成功的用户会新建一个Session,就是ifRequired 。
通过以下配置方式对该选项进行配置:
@Override protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
}
2.4 测试
2.4.1 未登录前,访问资源
跳转到登录页面
2.4.2 未登录成功后,访问资源
#现在刷新网址:
2.5 session超时的处理
可以再
sevlet
容器中设置
Session
的超时时间,如下设置
Session
有效期为
3600s
;
server.servlet.session.timeout
=
3600s
1.在配置文件进行设置
2.在Spring Security 配置文件中设置跳转的路径
3.controller
4.测试
1.登录
访问资源
一分钟后再次刷新:
2.6 cookie会话设置
我们可以使用
httpOnly
和
secure
标签来保护我们的会话
cookie
:
httpOnly
:如果为
true
,那么浏览器脚本将无法访问
cookie
secure
:如果为
true
,则
cookie
将仅通过
HTTPS
连接发送
spring boot
配置文件:
server.servlet.session.cookie.http‐only = trueserver.servlet.session.cookie.secure = true
2.7 会话控制
我们需要准确控制会话何时创建以及
Spring Security
如何与之交互:
1.在spring security config配置文件,通过以下配置方式对该选项进行配置:
@Overrideprotected void configure ( HttpSecurity http ) throws Exception {http . sessionManagement (). sessionCreationPolicy ( SessionCreationPolicy . IF_REQUIRED )}
默认情况下,Spring Security会为每个登录成功的用户会新建一个Session,就是ifRequired
。
若选用
never
,则指示
Spring Security
对登录成功的用户不创建
Session
了,但若你的应用程序在某地方新建了 session,那么
Spring Security
会用它的。
若使用
stateless
,则说明
Spring Security
对登录成功的用户不会创建
Session
了,你的应用程序也不会允许新建 session。并且它会暗示不使用
cookie
,所以每个请求都需要重新进行身份验证。这种无状态架构适用于
REST API 及其无状态认证机制
以上是关于spring boot整合 spring security之会话管理的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot:Spring Boot整合FreeMarker