国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > Apache > 正文

關于Apache shiro實現(xiàn)一個賬戶同一時刻只有一個人登錄(shiro 單

2024-08-27 18:24:14
字體:
供稿:網(wǎng)友
今天和同事在一起探討shiro如何實現(xiàn)一個賬戶同一時刻只有一session存在的問題,下面小編把核心代碼分享到武林網(wǎng)之家平臺,需要的朋友參考下

今天遇到一個項目問題,shiro如何實現(xiàn)一個賬戶同一時刻只有一session存在的問題,找了幾篇文章,在這里就把核心的代碼理了理,具體情況如下。

1.假設你使用了Apache shrio ,項目要求一個賬戶同一時刻只能有一個用戶存在,那么你就應該在你的shiro配置文件中添加以下代碼:

<bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.MemorySessionDAO"></bean>   <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">      <constructor-arg name="name" value="SHRIOSESSIONID"/>    </bean>    <!-- 配置shiro session 的一個管理器 -->   <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">     <property name="sessionDAO" ref="sessionDAO"></property>   </bean>   <!-- 配置shiro 緩存的一個管理器 -->   <bean id="shiroCacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager"></bean>   <!-- 配置 Shiro 的 SecurityManager Bean. -->   <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">     <!-- <property name="cacheManager" ref="cacheManager"/>-->     <property name="realm" ref="myRealm"/>     <!-- shiro緩存管理器 -->     <property name="cacheManager" ref="shiroCacheManager"></property>     <!-- shiro session管理器 -->     <property name="sessionManager" ref="sessionManager"></property>   </bean> 

接下來你就應該在你的realm中添加下面的代碼,這里主要是為了判斷用戶登錄的賬戶是否已經(jīng)登錄過了。

@Autowired private SessionDAO sessionDAO; ............... 

接下來你就應該在realm中得到shiro 的緩存中得到所有的已經(jīng)登錄的賬戶,進行判斷當前用戶是否已經(jīng)登錄

//apache shiro獲取所有在線用戶     Collection<Session> sessions = sessionDAO.getActiveSessions();     for(Session session:sessions){       String loginUsername = String.valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY));//獲得session中已經(jīng)登錄用戶的名字              if(username.equals(loginUsername)){ //這里的username也就是當前登錄的username         session.setTimeout(0); //這里就把session清除,                }     } 

2.SessionManager

這里有個可能出現(xiàn)bug的地方,可以通過配置sessionIdCookie屬性,解決被服務器重寫cookie中會話ID

<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">    <property name="globalSessionTimeout" value="1800000"/>    <property name="deleteInvalidSessions" value="true"/>    <property name="sessionValidationSchedulerEnabled" value="true"/>    <property name="sessionValidationInterval" value="1800000"/>    <property name="sessionIdCookie" ref="sessionIdCookie"/>  </bean>  <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">    <constructor-arg name="name" value="SHRIOSESSIONID"/>  </bean>  
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洪江市| 西乌珠穆沁旗| 北宁市| 于田县| 平舆县| 隆安县| 治多县| 梁山县| 开封县| 富民县| 纳雍县| 上犹县| 鄱阳县| 和龙市| 武定县| 余江县| 河东区| 周宁县| 大英县| 军事| 万年县| 龙山县| 湖北省| 红桥区| 荃湾区| 长阳| 张家川| 宁晋县| 安陆市| 湾仔区| 湄潭县| 招远市| 花莲县| 郎溪县| 东光县| 高邮市| 江西省| 正蓝旗| 林甸县| 宁津县| 德化县|