展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

解决session超时不允许再次登录

  • 错误回顾
1、配置session会话超时时长,自定义session失效处理
2、设置1个账号不能同时在2台电脑登录
3、redis实现session高可用集群、指定cookie中保存的sessionid名称
4、在实现以上3步操作后,认证通过,无操作等session超时,这时会提示session超时
5、这时再次登录时,会提示账号只能在1台电脑上登录
6、之前在《配置session会话超时时长,自定义session失效处理》这篇博客中处理不能登录的问题,解决方案是重新打开浏览器,或者删除JSESSIONID,才能再次认证
7、这里错误的原因是因为将session交给redis来管理,session超时后,虽然将浏览器中的sessionid删除了,但没有将redis中的sessionid删除
  • 新建一个项目demo11,在demo08的基础上开发,整合demo10(redis实现session高可用集群、指定cookie中保存的sessionId名称,但没有整合demo9,所以错误没有复现,这里只记录一下解决方法)

  • 在demo11中认证成功后

  • 查看redis

  • 超时后自定清除浏览器sessionid

  • 但并没有清除redis中的sessionid

  • 修改

# CustomInvalidSessionStrategy类中添加如下
// 使用构造器注入
private SessionRegistry sessionRegistry;
public CustomInvalidSessionStrategy(SessionRegistry sessionRegistry) {
this.sessionRegistry = sessionRegistry;
}
logger.info("getSession().getId(): " + request.getSession().getId());
logger.info("getRequestedSessionId(): " + request.getRequestedSessionId());
sessionRegistry.removeSessionInformation(request.getRequestedSessionId());
# 修改SecurityConfigBean类
@Configuration
public class SecurityConfigBean {
// 如果容器中还有InvalidSessionStrategy的实现类,则使用新的实现类
// 如果没有,则使用CustomInvalidSessionStrategy来处理session会话超时
// @Bean
// @ConditionalOnMissingBean(InvalidSessionStrategy.class)
// public InvalidSessionStrategy invalidSessionStrategy() {
// return new CustomInvalidSessionStrategy();
// }
@Autowired(required=false)
private SessionRegistry sessionRegistry;
@Bean
@ConditionalOnMissingBean(InvalidSessionStrategy.class)
public InvalidSessionStrategy invalidSessionStrategy() {
return new CustomInvalidSessionStrategy(sessionRegistry);
}
}
  • 再次测试:认证成功

  • 超时后,浏览器清除sessionid,redis也清除sessionid
# 控制台打印出要清除的sessionid
09:17:53.606 INFO 29940 --- [nio-8080-exec-1] c.y.s.a.CustomInvalidSessionStrategy : getRequestedSessionId(): 8f400e98-f8bd-41cf-9c56-1fe002fa77ab
  • 查看redis,已删除

posted @   DogLeftover  阅读(463)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示