1. 程式人生 > >Shiro - RememberMe記住我功能實現

Shiro - RememberMe記住我功能實現

【1】認證和記住我

① 記住我

Shiro提供了記住我(RememberMe)的功能,比如訪問如淘寶等一些網站時,關閉了瀏覽器,下次再開啟時還是能記住你是誰,下次訪問時無需再登入即可訪問,基本流程如下:

  • 首先在登入頁面選中RememberMe然後登入成功;如果是瀏覽器登入,一般會把RememberMe的Cookie 寫到客戶端並儲存下來;
  • 關閉瀏覽器再重新開啟;會發現瀏覽器還是記住你的;
  • 訪問一般的網頁伺服器端還是知道你是誰,且能正常訪問;
  • 但是比如我們訪問淘寶時,如果要檢視我的訂單或進行支付時,此時還是需要再進行身份認證的,以確保當前使用者還是你。

② 認證

subject.isAuthenticated() 表示使用者進行了身份驗證登入的,即使用Subject.login進行了登入。

subject.isRemembered()表示使用者是通過記住我登入的,此時可能並不是真正的你(如你的朋友使用你的電腦,或者你的cookie 被竊取)在訪問的。


③ 建議

訪問一般網頁:如個人在主頁之類的,我們使用user 攔截器即可,user 攔截器只要使用者登入(isRemembered() || isAuthenticated())過即可訪問成功。

訪問特殊網頁:如我的訂單,提交訂單頁面,我們使用authc攔截器即可,authc攔截器會判斷使用者是否是通過Subject.login(isAuthenticated()==true)

登入的,如果是才放行,否則會跳轉到登入頁面叫你重新登入。


【2】實現記住我功能

如果要自己做RememeberMe,程式碼例項如下:

 UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
 token.setRememberMe(true);

XML配置如下:

 	<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
		<constructor-arg value="rememberMe"/>
		<property name="httpOnly" value="true"/>
		<!-- 30天-->
		<property name="maxAge" value="2592000"/>
	</bean>
	
	<!-- rememberMe管理器-->
	<bean id="rememberMeManager"
		class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<!-- 		<property name="cipherKey" value=" -->
<!--   			#{T(org.apache.shiro.codec.Base64).decode('4AvVhmFLUs0KTA3Kprsdag==')}"/>  -->
		<property name="cookie" ref="rememberMeCookie"/>
	</bean>
	 <!-- 安全管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!-- 注入快取管理器 -->
        <property name="cacheManager" ref="cacheManager"/>
        <property name="authenticator" ref="authenticator" />
        <property name="realms">
        	<list>
    			<ref bean="customRealm"/>
    		</list>
        </property>
        <property name="sessionManager" ref="sessionManager" />
        <property name="rememberMeManager" ref="rememberMeManager" />
    </bean>

你可能需要在登入頁面新增一個記住我複選框,根據該複選框的狀態在後臺判斷是否設定token.setRememberMe(true);

Shiro完整配置與專案地址:GitHub-Shiro下載