aop維護小程序登陸狀態,before方法獲取request請求

    這是個人第一篇博客,可能碼的很差。本人是一名菜鳥,寫的不對的地方還望大神多多批評指點,歡迎留言,感激涕零。前端

   此次是記錄使用aop維持小程序登陸狀態的一次隨筆,可能基礎不太好,卡在瞭如何在before方法中得到header中的3rdSession,也就是如何得到request。express

   小程序每次請求須要驗證用戶是否登陸,若是header中3rdSession與後臺緩存中的不匹配,則斷定該用戶沒有登陸或登陸超時。小程序

   before方法裏主要是攔截每次前端的請求,在before方法裏進行3rdSession匹配,匹配成功返回loginStatus爲1,不然loginStatus0,而後小程序經過後臺傳回的loginStatus判斷用戶是否登陸。緩存

   話很少說直接上代碼。cookie

   1.首先寫一個切面類,裏面是aop的before和after方法session

 1 public class IsUserLoginAdviceImpl {
 2     public void isUserLogin() {
 3         //得到前端請求的request對象
 4         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
 5         //初始化
 6         String third_Session ="";
 7         Cookie[] cookies = request.getCookies();
 8         for(Cookie cookie:cookies){
 9             if (cookie.getName().equals("third_Session")){
10                 //得到前端傳來的登陸憑證 third_Session
11                 third_Session=cookie.getValue();
12             }
13         }
14         //得到存入緩存中third_Session所對應的值,即用戶的openId+sessionKey
15         String third_session_value = (String) CacheUtils.get(third_Session);
16         int loginStatus =0;
17         //不爲空則說明登陸驗證成功,返回true
18         if (!StringUtils.isEmpty(third_session_value)){
19             loginStatus =1;
20             CacheUtils.put("loginStatus",loginStatus);
21         }else {
22             //loginStatus爲0須要登陸
23             CacheUtils.put("loginStatus",loginStatus);
24         }
25     }

  2.沒有用註解的方式配aop,在xml文件中配置spa

  

 1 <!-- 指定切面所在的類-->
 2 <bean id="isUserLogin" class="cn.xxx.xxx.xxx.IsUserLoginAdviceImpl"/>
 3 <aop:config>
 4    <!-- 關聯切面bean所對應的id-->
 5    <aop:aspect id="confirmLogin" ref="isUserLogin">
 6       <!--切點 execution(): 表達式主體,第一個*表明全部的返回值類型;後面是包名;第二個*號:表示類名,*號表示全部的類;
 7       第3個*表示全部的方法;最後一個..表明全部的參數 ,後面一個表達式是登陸不須要攔截-->
 8       <aop:pointcut id="isUserLoginPointcut" expression="execution(* cn.xxx.xxx.xxx.*.*(..)) and !execution(* cn.xxx.xxx.xxx.UsersApiController.wxLogin(..))"/>
 9       <!-- 指定before方法,關聯切點id-->
10       <aop:before method="isUserLogin" pointcut-ref="isUserLoginPointcut"/>
11       <!-- 指定after方法,關聯切點id-->
12       <aop:after method="removeLoginStatusCache" pointcut-ref="isUserLoginPointcut"/>
13    </aop:aspect>
14 </aop:config>

 

這裏開始一直糾結如何得到小程序header裏攜帶的3rdSession,由於平時得到request都是在接口中(HttpServletRequest req)這樣的方式,這種方式並不適用這種狀況,最後查了一下得到request的幾種方式,找到了答案。.net

1        //得到前端請求的request對象
2         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

最後貼出原文地址,感興趣的朋友能夠看一下。https://blog.csdn.net/ChlatZed/article/details/72923351code

您的每一次批評指正都會讓我進步,歡迎留言指正!xml

相關文章
相關標籤/搜索