日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shiro——RememberMe

發布時間:2025/3/12 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shiro——RememberMe 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

1、首先在登錄頁面選中RememberMe然后登錄成功;如果是瀏覽器登錄,一般會把RememberMe的Cookie寫到客戶端并保存下來;

2、關閉瀏覽器再重新打開;會發現瀏覽器還是記住你的;

3、訪問一般的網頁服務器端還是知道你是誰,且能正常訪問;

4、但是比如我們訪問淘寶時,如果要查看我的訂單或進行支付時,此時還是需要再進行身份認證的,以確保當前用戶還是你。

RememberMe配置

spring-shiro-web.xml配置:

Java代碼

<!-- 會話Cookie模板 --> <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> <constructor-arg value="sid"/> <property name="httpOnly" value="true"/> <property name="maxAge" value="-1"/> </bean> <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> <constructor-arg value="rememberMe"/> <property name="httpOnly" value="true"/> <property name="maxAge" value="2592000"/><!-- 30天 --> </bean>

sessionIdCookie:maxAge=-1表示瀏覽器關閉時失效此Cookie;

rememberMeCookie:即記住我的Cookie,保存時長30天;

Java代碼

<!-- 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>

rememberMe管理器,cipherKey是加密rememberMe Cookie的密鑰;默認AES算法;

Java代碼

<!-- 安全管理器 --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> …… <property name="rememberMeManager" ref="rememberMeManager"/> </bean>

設置securityManager安全管理器的rememberMeManager;

Java代碼

<bean id="formAuthenticationFilter" class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter"> …… <property name="rememberMeParam" value="rememberMe"/> </bean>

rememberMeParam,即rememberMe請求參數名,請求參數是boolean類型,true表示rememberMe。

Java代碼

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> …… <property name="filterChainDefinitions"> <value> /login.jsp = authc /logout = logout /authenticated.jsp = authc /** = user </value> </property> </bean>

“/authenticated.jsp = authc”表示訪問該地址用戶必須身份驗證通過(Subject. isAuthenticated()==true);而“/** = user”表示訪問該地址的用戶是身份驗證通過或RememberMe登錄的都可以。

測試:

1、訪問http://localhost:8080/chapter13/,會跳轉到登錄頁面,登錄成功后會設置會話及rememberMe Cookie;

2、關閉瀏覽器,此時會話cookie將失效;

3、然后重新打開瀏覽器訪問http://localhost:8080/chapter13/,還是可以訪問的;

4、如果此時訪問http://localhost:8080/chapter13/authenticated.jsp,會跳轉到登錄頁面重新進行身份驗證。

如果要自己做RememeberMe,需要在登錄之前這樣創建Token:UsernamePasswordToken(用戶名,密碼,是否記住我),如:

Java代碼

Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(username, password); token.setRememberMe(true); subject.login(token);

subject.isAuthenticated():表示用戶進行了身份驗證登錄的,即使有Subject.login進行了登錄;subject.isRemembered():表示用戶是通過記住我登錄的,此時可能并不是真正的你(如你的朋友使用你的電腦,或者你的cookie被竊取)在訪問的;且兩者二選一,即subject.isAuthenticated()==true,則subject.isRemembered()==false;反之一樣。

另外對于過濾器,一般這樣使用:

訪問一般網頁,如個人在主頁之類的,我們使用user攔截器即可,user攔截器只要用戶登錄(isRemembered()==true or isAuthenticated()==true)過即可訪問成功;

訪問特殊網頁,如我的訂單,提交訂單頁面,我們使用authc攔截器即可,authc攔截器會判斷用戶是否是通過Subject.login(isAuthenticated()==true)登錄的,如果是才放行,否則會跳轉到登錄頁面叫你重新登錄。

因此RememberMe使用過程中,需要配合相應的攔截器來實現相應的功能,用錯了攔截器可能就不能滿足你的需求了。

參考文章:https://www.iteye.com/blog/jinnianshilongnian-2031823

?

總結

以上是生活随笔為你收集整理的Shiro——RememberMe的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。