0
点赞
收藏
分享

微信扫一扫

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

  • 在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是否已经删除
  • 自定义退出登录的处理,自定义退出登录逻辑_Spring Security_02

  • 修改

# 新建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值;



举报

相关推荐

0 条评论