国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 额尔古纳市| 乐山市| 长白| 安徽省| 景谷| 新营市| 读书| 岢岚县| 丁青县| SHOW| 枣强县| 绥化市| 如皋市| 穆棱市| 灵石县| 岐山县| 茶陵县| 海门市| 卫辉市| 开远市| 临朐县| 马关县| 扶风县| 介休市| 历史| 富川| 连平县| 高雄县| 华坪县| 海丰县| 定安县| 长丰县| 临洮县| 合作市| 惠来县| 灯塔市| 治县。| 民县| 东莞市| 顺昌县| 江山市|