Session管理
本文主要描述在 Spring Security 下 Session的以下三种管理,
- Session超时时间
- Session的并发策略
- 集群环境Session处理
Session超时
- application.yml配置超时时间
server: port: 80 session: timeout: 60 复制代码
- 配置MerryyouSecurityConfig
http. ...... .sessionManagement() .invalidSessionUrl("/session/invalid")//session失效跳转的链接 ..... 复制代码
- Cotroller中/session/invalid
@GetMapping("/session/invalid") @ResponseStatus(code = HttpStatus.UNAUTHORIZED) public Result<String> sessionInvalid() { return ResultUtil.error(HttpStatus.UNAUTHORIZED.value(), "session失效"); } 复制代码
Session的并发策略
- 配置MerryyouSecurityConfig
http. ...... .maximumSessions(1)//最大session并发数量1 .maxSessionsPreventsLogin(false)//false之后登录踢掉之前登录,true则不允许之后登录 .expiredSessionStrategy(new MerryyounExpiredSessionStrategy())//登录被踢掉时的自定义操作 ..... 复制代码
- 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("并发登录!"); } } 复制代码
集群环境Session处理
添加spring-session-data-redis依赖
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
复制代码
配置Spring-session存储策略
spring:
redis:
host: localhost
port: 6379
session:
store-type: redis
复制代码
测试8080和8081端口分别启动项目
java -jar spring-security.jar --server.port=8080
java -jar spring-security.jar --server.port=8081
复制代码
效果如下:
关于更多Spring Session可参考: 程序猿DD代码下载
从我的 github 中下载,github.com/longfeizhen…