电竞比分网-中国电竞赛事及体育赛事平台

分享

apache shiro踢出用戶和獲取所有在線用戶

 aaie_ 2016-12-24

apache shiro踢出用戶:

產(chǎn)品要求用戶只能在同一個地方登錄,如果之前在其他機器或者瀏覽器上登錄,講之前登錄賬號踢出。applicationContext-shiro.xml配置:

在默認(rèn)的shiro配置上增加如下配置(本文假設(shè)你已經(jīng)使用過apache shiro,并且已經(jīng)使用shiro成功實現(xiàn)登錄功能):


<bea id="sessionDAO" class="org.apache.shiro.session.mgt.eis.MemorySessionDAO"/>

<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">

<property name="sessionDAO" ref="sessionDAO"/>

</bean>

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

<property name="realm" ref="shiroDbRealm" />

<property name="cacheManager" ref="shiroCacheManager" />

<property name="sessionManager" ref="sessionManager" />

</bean>


然后在ShiroDbRealm中的認(rèn)證方法中增加如下代碼,代碼主要目的就是根據(jù)當(dāng)前登錄名獲取之前使用同樣登錄名登錄后的session

@Autowired

private SessionDAO sessionDAO;

...

String loginName=token.getUsername();

Session currentSession = null;

Collection<Session> sessions = sessionDAO.getActiveSessions();

for(Session session:sessions){

if(loginName.equals(String.valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY))) {

session.setTimeout(0);//設(shè)置session立即失效,即將其踢出系統(tǒng)

break;

}

}

apache shiro獲取所有在線用戶:


Collection<Session> sessions = sessionDAO.getActiveSessions();

for(Session session:sessions){

System.out.println("登錄ip:"+session.getHost());

System.out.println("登錄用戶"+session.getAttribute(DefaultWebContext.PRINCIPALS_SESSION_KEY));

System.out.println("最后操作日期:"+session.getLastAccessTime());

}

紅色部分:MemorySessionDAO ,切記不能使用EnterpriseCacheSessionDAO,使用該類的時候,雖然也能起到踢出用戶的作用,但是后登錄的用戶隔兩三分鐘就會session自動失效。


點擊去我的個人站點查看原文


更多文章,歡迎關(guān)注俺的微信訂閱號,每天一篇小筆記,每天提高一點點:

公眾號:enilu123


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多