主要是用於后期的代碼擴展,在業務中的思路:服務器背景是有一個tomcat集群,為了實現單點登錄的功能,將登錄的請求打到了其中一台服務器上面,將此會話session的id以token的形式傳入,並封裝到cookie中放回響應response中去。並將用戶的登錄信息放到分布式緩存中,key就為此Session的id,CookieUtil工具類主要包含重新組裝cookie,從請求中讀取cookie,往響應中寫cookie,刪除指定的cookie。
CookieUtil類:
/** * @author 大神愛吃茶 * @Date 2020/1/6 0006 下午 20:04 */ public class CookieUtil { private static Logger logger = LoggerFactory.getLogger(CookieUtil.class); private final static String COOKIE_DOMAIN = ".rmall.com"; private final static String COOKIE_NAME = "rmall_login_token"; //從請求中讀取cookie public static String readLoginToken(HttpServletRequest request){ Cookie[] cks = request.getCookies(); if(cks != null){ for(Cookie ck : cks){ logger.info("read cookieName:{},cookieValue:{}",ck.getName(),ck.getValue()); if(StringUtils.equals(ck.getName(), COOKIE_NAME)){ logger.info("return cookieName:{},cookieValue:{}",ck.getName(),ck.getValue()); return ck.getValue(); } } } return null; } //往響應中寫cookie public static void writeLoginToken(HttpServletResponse response,String token){//這里的cookie的名字就是rmall_login_token,而值就是token,這里的token就是sessionID Cookie cookie = new Cookie(COOKIE_NAME, token); cookie.setDomain(COOKIE_DOMAIN); //將cookie設置在根目錄下面 cookie.setPath("/"); cookie.setHttpOnly(true); //設置cookie的有效期,單位是秒(一年) //如果這個maxage不設置的話,cookie就不會寫入硬盤,而是寫在內存。只在當前頁面有效。 cookie.setMaxAge(60*60*24*365); logger.info("write cookieName:{},cookieValue:{}",cookie.getName(),cookie.getValue()); response.addCookie(cookie); } //刪除cookie(從請求中讀,往響應中寫,已經刪除完了的) public static void delLoginToken(HttpServletRequest request,HttpServletResponse response){ Cookie[] cookies = request.getCookies(); if(cookies != null){ for(Cookie cookie : cookies){ if(StringUtils.equals(cookie.getName(), COOKIE_NAME)){ cookie.setDomain(COOKIE_DOMAIN); cookie.setPath("/"); cookie.setMaxAge(0); logger.info("del cookieName:{},cookieValue:{}",cookie.getName(),cookie.getValue()); response.addCookie(cookie); return; } } } } }
