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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

单点登录之SessionExpireFilter重置session有效期

發布時間:2024/4/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单点登录之SessionExpireFilter重置session有效期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們架構的改變會牽涉代碼的改變,架構是一步一步演進的,代碼也要一步一步演進,相信這個過程能夠學到很多很多,如果重置redis的一個時間,我們先來到代碼里邊,首先我們這個實現方案是通過過濾器來實現,過濾所有.do請求結尾的,然后在里面進行一個判斷,并把session進行一個重置時間,首先在Controller里面,加一個common包,這個common包不同于上面的common包,上面的是業務上實現的各種common,而這個common加到controller里,它會對Controller造成影響,我們在這里加一個類,SessionExpireFilter,這么一個類,他來實現Filter這個接口,這個Filter不要導錯包,導入javax.servlet里面的filter,然后實現他的方法,因為它是一個接口,初始化和destroy我們就不寫了,我們繼續寫,主要是寫doFilter,首先要做的是,把ServletRequest強轉成HttpServletRequest,因為HttpServletRequest繼承ServletRequest,然后我們拿到loginToken,這里面要做一個判斷,用Apache的一個包,如果拿到的一個cookie,也就是mmall_login_token不是空,那我們就用redis里面拿user,這個用戶的JSON字符串,然后對他進行反序列化,那這里要判斷一下,如果user不等于空,這里面的邏輯就是說,先判斷loginToken,是否為空,或者空字符串 /*** <p>Checks if a String is not empty ("") and not null.</p>** <pre>* StringUtils.isNotEmpty(null) = false* StringUtils.isNotEmpty("") = false* StringUtils.isNotEmpty(" ") = true* StringUtils.isNotEmpty("bob") = true* StringUtils.isNotEmpty(" bob ") = true* </pre>** @param str the String to check, may be null* @return <code>true</code> if the String is not empty and not null*/public static boolean isNotEmpty(String str) {return !StringUtils.isEmpty(str);} /*** <p>Checks if a String is empty ("") or null.</p>** <pre>* StringUtils.isEmpty(null) = true* StringUtils.isEmpty("") = true* StringUtils.isEmpty(" ") = false* StringUtils.isEmpty("bob") = false* StringUtils.isEmpty(" bob ") = false* </pre>** <p>NOTE: This method changed in Lang version 2.0.* It no longer trims the String.* That functionality is available in isBlank().</p>** @param str the String to check, may be null* @return <code>true</code> if the String is empty or null*/public static boolean isEmpty(String str) {return str == null || str.length() == 0;} 如果不為空,符合條件,繼續拿user信息,這里面還判斷一下,如果user不為空,則重置session的時間,既調用expire命令,那我們這個filter就寫完了,這里面的邏輯是非常簡單的,我們還要在web.xml中把filter配置上 package com.mmall.controller.common;import com.mmall.common.Const; import com.mmall.pojo.User; import com.mmall.util.CookieUtil; import com.mmall.util.JsonUtil; import com.mmall.util.RedisShardedPoolUtil; import org.apache.commons.lang.StringUtils;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import java.io.IOException;/*** * @author Leon.Sun**/ public class SessionExpireFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;String loginToken = CookieUtil.readLoginToken(httpServletRequest);if(StringUtils.isNotEmpty(loginToken)){//判斷logintoken是否為空或者"";//如果不為空的話,符合條件,繼續拿user信息String userJsonStr = RedisShardedPoolUtil.get(loginToken);User user = JsonUtil.string2Obj(userJsonStr,User.class);if(user != null){//如果user不為空,則重置session的時間,即調用expire命令RedisShardedPoolUtil.expire(loginToken, Const.RedisCacheExtime.REDIS_SESSION_EXTIME);}}filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {} } public interface RedisCacheExtime{int REDIS_SESSION_EXTIME = 60 * 30;//30分鐘} 重置session時間的filter,首先加一個filter節點<filter><filter-name>sessionExpireFilter</filter-name><filter-class>com.learn.controller.common.SessionExpireFilter</filter-class></filter><filter-mapping><filter-name>sessionExpireFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping>全是以do結尾的都走這個攔截器,來重置它的session時間,那這個sessionFilter就加完了 我們TOMCAT集群在橫線擴展的時候,想達到這種效果,就會衍生出來各種的一系列問題,例如我們一開始把SESSION,通過cookie,都寫到redis里面,同時也能讀到,但是我們還要考慮,session有效期的問題,所以我們又加了一個expireFilter,因為TOMCAT集群非常非常重要,能夠提高大家的思維能力,架構能力,還有編碼能力,最重要的實戰經驗

?

總結

以上是生活随笔為你收集整理的单点登录之SessionExpireFilter重置session有效期的全部內容,希望文章能夠幫你解決所遇到的問題。

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