shiro 每次請求都會新建會話,創建session

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


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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章