1. 程式人生 > >shiro 只允許一個人登入

shiro 只允許一個人登入

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;
}