Shiro學習筆記——remember me
阿新 • • 發佈:2018-12-10
認證和記住我的區別
subject.isAuthenticated()
,表示使用者進行了身份驗證登入的,即使用subject.login
進行了登入。subject.isRemebered()
,表示使用者是通過記住我登入的,此時可能並不是真正的你(如你的朋友使用你的電腦,或者你的cookie被竊取)在訪問的。- 兩者二選一,即
subject.isAuthenticated()==true
,則subject.isRemembered()==false
,反之一樣,兩個狀態只能選一個。
建議
- 訪問一般網頁,如個人在主頁之類的,我們使用
user
攔截器即可,user攔截器只要使用者登入。(isRemembered() || isAuthenticated())
- 訪問特殊網頁,如我的訂單,提交訂單頁面,我們使用
authc
攔截器即可,authc攔截器會判斷使用者是否是通過Subject.login(isAuthenticated()==true)
登入的,如果是才放行,否則會跳轉到登入頁面叫你重新登入。
測試
(1)開啟瀏覽器,登入,訪問list.jsp成功,訪問admin.jsp成功。 (2)關閉瀏覽器。 (3)開啟瀏覽器,訪問list.jsp成功,訪問admin.jsp失敗,跳轉至登入介面。
RememberMeManager
RememberMe通過這個Bean進行管理,其中有一些可配置的引數。 例如:
<bean id="securityManager"
class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="cacheManager" ref="cacheManager" />
<property name="authenticator" ref="authenticator"></property>
<property name="realms">
<list>
<ref bean="jdbcRealm"></ref>
<ref bean="secondRealm"></ref>
</list>
</property>
<property name="rememberMeManager.cookie.maxAge" value="10">
</property>
最後一行設定了Cookie的最長有效期,10秒後Cookie失效,即需要重新登入。