shiro 只允許一個人登入
阿新 • • 發佈:2019-01-08
1.在a裝置登入
2.在b裝置登陸會刪除在a裝置的SessionId,造成a裝置登陸失效
入參登入人ID
public boolean deleteSession(String id){
DefaultWebSecurityManager securityManager = (DefaultWebSecurityManager) SecurityUtils.getSecurityManager();DefaultWebSessionManager sessionManager = (DefaultWebSessionManager)securityManager.getSessionManager();
Collection<Session> sessions = sessionManager.getSessionDAO().getActiveSessions();//獲取當前已登入的使用者session列表
for(Session session:sessions){
//清除該使用者以前登入時儲存的session
//對比傳入SessionId與快取中SessionId是否一致,一致則判斷為同一裝置登陸,不做刪除
Object o=session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);
if(o!=null&&!SecurityUtils.getSubject().getSession().getId().equals(session.getId())
&&id.equals(o.toString())) {
sessionManager.getSessionDAO().delete(session);
log.debug("不同裝置登陸");
}
}
return true;
}