天天看點

自定義登出的處理,自定義登出邏輯

  • 在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值;      

繼續閱讀