程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> shiro完成單點登錄(一個用戶統一時辰只能在一個處所登錄)

shiro完成單點登錄(一個用戶統一時辰只能在一個處所登錄)

編輯:關於JAVA

shiro完成單點登錄(一個用戶統一時辰只能在一個處所登錄)。本站提示廣大學習愛好者:(shiro完成單點登錄(一個用戶統一時辰只能在一個處所登錄))文章只能為提供參考,不一定能成為您想要的結果。以下是shiro完成單點登錄(一個用戶統一時辰只能在一個處所登錄)正文


我這裡 shiro 並沒有集成 springMVC,直接應用 ini 設置裝備擺設文件。

shiro.ini

[main]
# Objects and their properties are defined here,
# Such as the securityManager, Realms and anything
# else needed to build the SecurityManager
authc.loginUrl = /login.jsp
authc.successUrl = /web/index.jsp
#cache manager
builtInCacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
securityManager=org.apache.shiro.web.mgt.DefaultWebSecurityManager
securityManager.cacheManager = $builtInCacheManager
securityManager.sessionManager=$sessionManager
#session 必需設置裝備擺設session,強迫加入時,經由過程將session移除完成
sessionManager=org.apache.shiro.web.session.mgt.DefaultWebSessionManager
sessionManager.sessionDAO=$sessionDAO
sessionDAO=org.apache.shiro.session.mgt.eis.MemorySessionDAO
# Create ldap realm
ldapRealm = org.apache.shiro.realm.ldap.JndiLdapRealm
#......
# Configure JDBC realm datasource
dataSource = org.postgresql.ds.PGPoolingDataSource
#.......
# Create JDBC realm.
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.userRolesQuery = ......
jdbcRealm.permissionsQuery = ......
jdbcRealm.dataSource = $dataSource
#self realm
localAuthorizingRealm = com.redbudtek.shiro.LocalAuthorizingRealm
securityManager.realms = $ldapRealm, $localAuthorizingRealm

在 LocalAuthorizingRealm 中,用戶登錄停止認證之前,先將該用戶的其他session移除:

@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
String userName = (String)authenticationToken.getPrincipal();
//處置session
DefaultWebSecurityManager securityManager = (DefaultWebSecurityManager) SecurityUtils.getSecurityManager();
DefaultWebSessionManager sessionManager = (DefaultWebSessionManager)securityManager.getSessionManager();
Collection<Session> sessions = sessionManager.getSessionDAO().getActiveSessions();//獲得以後已登錄的用戶session列表
for(Session session:sessions){
//消除該用戶之前登錄時保留的session
if(userName.equals(String.valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY)))) {
sessionManager.getSessionDAO().delete(session);
}
}
String pwd = null;
return new SimpleAuthenticationInfo(userName,pwd,getName());
}

當session刪除以後,必需有客戶端與辦事器真個交互,shiro能力停止認證斷定。在與辦事器交互時,subject信息截圖以下:

此時的登錄的用戶認證曾經掉效,可以對客戶端做出呼應。

以上所述是小編給年夜家引見的shiro完成單點登錄(一個用戶統一時辰只能在一個處所登錄),願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved