Spring Security源码分析九:Spring Security Session管理

栏目: Java · 发布时间: 6年前

内容简介:Spring Security源码分析九:Spring Security Session管理

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。

Session管理

本文主要描述在 Spring SecuritySession 的以下三种管理,

  1. Session 超时时间
  2. Session 的并发策略
  3. 集群环境 Session 处理

Session超时

  1. application.yml 配置超时时间
server:
  port: 80
  session:
    timeout: 60
  1. 配置 MerryyouSecurityConfig
http.
......
	       .sessionManagement()
            .invalidSessionUrl("/session/invalid")//session失效跳转的链接
.....
  1. Cotroller/session/invalid
@GetMapping("/session/invalid")
    @ResponseStatus(code = HttpStatus.UNAUTHORIZED)
    public Result<String> sessionInvalid() {
        return ResultUtil.error(HttpStatus.UNAUTHORIZED.value(), "session失效");
    }

效果如下:

user-gold-cdn.xitu.io/2018/1/19/1…

Session的并发策略

  1. 配置 MerryyouSecurityConfig
http.
......
	       .maximumSessions(1)//最大session并发数量1
           .maxSessionsPreventsLogin(false)//false之后登录踢掉之前登录,true则不允许之后登录
           .expiredSessionStrategy(new MerryyounExpiredSessionStrategy())//登录被踢掉时的自定义操作
.....
  1. MerryyounExpiredSessionStrategy
@Slf4j
public class MerryyounExpiredSessionStrategy implements SessionInformationExpiredStrategy {
    @Override
    public void onExpiredSessionDetected(SessionInformationExpiredEvent eventØ) throws IOException, ServletException {
        eventØ.getResponse().setContentType("application/json;charset=UTF-8");
        eventØ.getResponse().getWriter().write("并发登录!");
    }
}

效果如下:

user-gold-cdn.xitu.io/2018/1/19/1…

maxSessionsPreventsLogin(true) 可参考: Spring-Securitysecurity-oauth2

集群环境Session处理

  1. 添加spring-session-data-redis依赖
<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
			<version>1.3.1.RELEASE</version>
		</dependency>
  1. 配置Spring-session存储策略
spring:
  redis:
    host: localhost
    port: 6379
  session:
    store-type: redis
  1. 测试 80808081 端口分别启动项目
java -jar spring-security.jar --server.port=8080
java -jar spring-security.jar --server.port=8081

效果如下:

user-gold-cdn.xitu.io/2018/1/19/1…

关于更多Spring Session可参考:程序猿DD


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

VC++深入详解

VC++深入详解

孙鑫 / 电子工业出版社 / 2006-6 / 89.00元

《VC++深入详解》主要从程序内部运行的机制和MFC程序的组织脉络入手,使读者在学习VC++编程知识时,既能够知其然,又能知其所以然,从而帮助读者从根本上理解和掌握Windows的程序设计。另外,《VC++深入详解》还贯穿作者多年来学习编程的一些经验,以及一些学习方法的建议,为读者进一步的学习提供指导。   《VC++深入详解》从实际应用入手,由浅入深、循序渐进地讲述Windows程......一起来看看 《VC++深入详解》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试