自定义退出登录的处理,自定义退出登录逻辑
- 在demo11的基础上完善
- 解决退出登录后不能再次登录
1、配置session会话超时时长,自定义session失效处理 2、设置1个账号不能同时在2台电脑登录 3、redis实现session高可用集群、指定cookie中保存的sessionid名称 4、在实现以上3步操作后,认证通过,退出登录,这时会提示账号只能在1台电脑上登录 5、之前在《session超时不允许再次登录》这篇博客中处理不能登录的问题,解决方案是删除redis中的sessionid 7、所以这里我们要自定义退出登录的处理类,在处理类中删除redis中的sessionid
-
错误演示:首先认证成功后,redis中会保存sessionid
-
浏览器直接退出登录
http://localhost:8080/logout
-
控制台未打印sessionid,再次查看redis,不确定sessionid是否已经删除
-
修改
# 新建CustomLogoutHandler @Component public class CustomLogoutHandler implements LogoutHandler { @Autowired private SessionRegistry sessionRegistry; @Override public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { // 退出之后 ,将对应session从缓存中清除 SessionRegistryImpl.principals sessionRegistry.removeSessionInformation(request.getSession().getId()); } } # SpringSecurityConfig类中添加如下 /** * 退出清除缓存 */ @Autowired private CustomLogoutHandler customLogoutHandler; /** * 为了解决退出重新登录问题 * @return */ @Bean public SessionRegistry sessionRegistry() { return new SessionRegistryImpl(); } .sessionRegistry(sessionRegistry()) .and() .logout() .addLogoutHandler(customLogoutHandler) // 退出清除缓存 .logoutUrl("/user/logout") // 退出请求路径 .logoutSuccessUrl("/mobile/page") //退出成功后跳转地址 .deleteCookies("JSESSIONID"); // 退出后删除什么cookie值;
分类:
权限认证
标签:
Spring Security
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-06-26 开发小技巧