1. 程式人生 > >Shiro學習筆記——remember me

Shiro學習筆記——remember me

認證和記住我的區別

  • subject.isAuthenticated(),表示使用者進行了身份驗證登入的,即使用subject.login進行了登入。
  • subject.isRemebered(),表示使用者是通過記住我登入的,此時可能並不是真正的你(如你的朋友使用你的電腦,或者你的cookie被竊取)在訪問的。
  • 兩者二選一,即subject.isAuthenticated()==true,則subject.isRemembered()==false,反之一樣,兩個狀態只能選一個。

建議

  1. 訪問一般網頁,如個人在主頁之類的,我們使用user攔截器即可,user攔截器只要使用者登入。(isRemembered() || isAuthenticated())
    過即可訪問成功。
  2. 訪問特殊網頁,如我的訂單,提交訂單頁面,我們使用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失效,即需要重新登入。