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

自定义退出登录的处理,自定义退出登录逻辑

  • 在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值;
posted @ 2022-06-26 08:34  DogLeftover  阅读(34)  评论(0编辑  收藏  举报