最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Apache shiro實(shí)現(xiàn)一個(gè)賬戶同一時(shí)刻只有一個(gè)人登錄(shiro 單點(diǎn)登錄)

 更新時(shí)間:2017年09月20日 10:50:56   作者:ChaplinJ  
今天和同事在一起探討shiro如何實(shí)現(xiàn)一個(gè)賬戶同一時(shí)刻只有一session存在的問(wèn)題,下面小編把核心代碼分享到腳本之家平臺(tái),需要的朋友參考下

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

1.假設(shè)你使用了Apache shrio ,項(xiàng)目要求一個(gè)賬戶同一時(shí)刻只能有一個(gè)用戶存在,那么你就應(yīng)該在你的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 的一個(gè)管理器 --> 
  <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> 
    <property name="sessionDAO" ref="sessionDAO"></property> 
  </bean> 
  <!-- 配置shiro 緩存的一個(gè)管理器 --> 
  <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> 

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

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

接下來(lái)你就應(yīng)該在realm中得到shiro 的緩存中得到所有的已經(jīng)登錄的賬戶,進(jìn)行判斷當(dā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也就是當(dāng)前登錄的username 
        session.setTimeout(0); //這里就把session清除, 
         
      } 
    } 

2.SessionManager

這里有個(gè)可能出現(xiàn)bug的地方,可以通過(guò)配置sessionIdCookie屬性,解決被服務(wù)器重寫cookie中會(huì)話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>  

完成這一切之后,本地單一用戶登錄就差不多完成了,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

泾源县| 富川| 淮北市| 南靖县| 阿瓦提县| 镇平县| 个旧市| 南宫市| 鹤壁市| 华亭县| 农安县| 扎兰屯市| 郑州市| 上蔡县| 沭阳县| 元阳县| 凯里市| 克拉玛依市| 黄陵县| 武隆县| 修水县| 苏尼特左旗| 汾西县| 大港区| 罗平县| 盐源县| 信宜市| 肇州县| 岚皋县| 洞头县| 碌曲县| 筠连县| 荔浦县| 漠河县| 扶风县| 永州市| 本溪市| 育儿| 宁明县| 翁牛特旗| 揭东县|