国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
我的shiro之旅: 十 自定義shiro的SessionIdCookie

在使用shiro的時候,曾經(jīng)有段時間很苦惱,因為我cookie的sessionId經(jīng)常無故被改,然后拋There is no session with id [xxxx]的異常。我們知道,當請求過來,shiro創(chuàng)建session后,會把sessionId寫回到客戶端的cookie中。每二個請求過來時,shiro會拿到這個cookie里的sessionId去查找,如果查找不到,就有可能拋There is no session with id的異常。通過拋這個異常的會有兩種情況,一種就是我剛才說的,cookie被改寫了,因為shiro默認的cookie名叫JSESSIONID,當在web.xml里配置的請求攔截配得不合理時,就有可能被改寫。在我的項目中,因為有些靜態(tài)資源配置了不攔截,就會被容器改寫了這個cookie。后來,干脆把cookie的名字改了,不再叫JSESSIONID。還有一種就是瀏覽器打開很久都沒有操作,然后shiro定時清理了不活動的session,這時瀏覽器再發(fā)請求過來,因為session已被清理,也會拋There is no session with id。更改cookie的名字方法如下:

01   <bean id="shiroSessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
02    <property name="sessionDAO" ref="sessionDAO"/>
03    <!-- <property name="sessionValidationScheduler" ref="shiroSessionValidationScheduler"/> -->
04    <property name="sessionValidationInterval" value="1800000"/>  <!-- 相隔多久檢查一次session的有效性 -->
05    <property name="globalSessionTimeout" value="1800000"/>  <!-- session 有效時間為半小時 (毫秒單位)-->
06    <property name="sessionIdCookie.domain" value=".xxx.com"/>
07    <property name="sessionIdCookie.name" value="jsid"/>
08    <property name="sessionIdCookie.path" value="/"/>
09    <!-- <property name="sessionListeners">
10        <list>
11            <bean class="com.concom.security.interfaces.listener.SessionListener"/>
12        </list>
13    </property> -->
14</bean>

我們打開shiro的DefaultWebSessionManager類源碼就可以知道,里面有個private Cookie sessionIdCookie;屬性,這個就是sessionId的cookie。在DefaultWebSessionManager的構(gòu)造器里,初始化的名字取的是ShiroHttpSession.DEFAULT_SESSION_ID_NAME,也就是"JSESSIONID",在這里我們不去改源碼,只要通過spring改sessionIdCookie的屬性即可。

1public DefaultWebSessionManager() {
2        Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
3        cookie.setHttpOnly(true); //more secure, protects against XSS attacks
4        this.sessionIdCookie = cookie;
5        this.sessionIdCookieEnabled = true;
6    }


在上面的xml配置中,寫了sessionIdCookie.domain的值為.xxx.com,這個根據(jù)自己的項目而定。這里配置為的是某域名及其二級域名都能共享這個cookie。還有sessionIdCookie.name,這個就是cookie的名字,值為jsid。這樣我們就可以看到,cookie會多了一個名字jsid,值為當前session的id的鍵值。在上面還配置了兩個關(guān)于session有效期的配置,一個是sessionValidationInterval,表示shiro的定時器多久去檢查一次session的有效性,一個是globalSessionTimeout,表示session的有效時長。當然,我們也完全可以息定義定時器,把定時器注入到DefaultWebSessionManager的sessionValidationScheduler屬性中,只是個人覺得沒這個必要。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
apache shiro集群實現(xiàn)(一) session共享
Apache shiro集群實現(xiàn) (六)分布式集群系統(tǒng)下的高可用session解決方案
shiro實現(xiàn)APP、web統(tǒng)一登錄認證和權(quán)限管理
第十八章 并發(fā)登錄人數(shù)控制
實戰(zhàn),通過復(fù)寫shiro的SessionDAO來實現(xiàn)將session保存到redis集群中
登陸狀態(tài)持久化
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服