session持久redis单点登录cookie工具类

package com.mmall.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class CookieUtil {

/**
* 大致思路 : 重写cookie中的sessionId , 以便在redis中获取session
*/

private final static String COOKIE_DOMAIN = ".happymmall.com";
private final static String COOKIE_NAME = "mmall_login_token";


public static String readLoginToken(HttpServletRequest request){
    Cookie[] cks = request.getCookies();
    if(cks != null){
        for(Cookie ck : cks){
            log.info("read cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());
            if(StringUtils.equals(ck.getName(),COOKIE_NAME)){
                log.info("return cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());
                return ck.getValue();
            }
        }
    }
    return null;
}

//X:domain=".happymmall.com"
//a:A.happymmall.com            cookie:domain=A.happymmall.com;path="/"
//b:B.happymmall.com            cookie:domain=B.happymmall.com;path="/"
//c:A.happymmall.com/test/cc    cookie:domain=A.happymmall.com;path="/test/cc"
//d:A.happymmall.com/test/dd    cookie:domain=A.happymmall.com;path="/test/dd"
//e:A.happymmall.com/test       cookie:domain=A.happymmall.com;path="/test"

public static void writeLoginToken(HttpServletResponse response,String token){
    Cookie ck = new Cookie(COOKIE_NAME,token);
    ck.setDomain(COOKIE_DOMAIN);
    ck.setPath("/");//代表设置在根目录
    ck.setHttpOnly(true);
    //单位是秒。
    //如果这个maxage不设置的话,cookie就不会写入硬盘,而是写在内存。只在当前页面有效。
    ck.setMaxAge(60 * 60 * 24 * 365);//如果是-1,代表永久
    log.info("write cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());
    response.addCookie(ck);
}


public static void delLoginToken(HttpServletRequest request,HttpServletResponse response){
    Cookie[] cks = request.getCookies();
    if(cks != null){
        for(Cookie ck : cks){
            if(StringUtils.equals(ck.getName(),COOKIE_NAME)){
                ck.setDomain(COOKIE_DOMAIN);
                ck.setPath("/");
                ck.setMaxAge(0);//设置成0,代表删除此cookie。
                log.info("del cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());
                response.addCookie(ck);
                return;
            }
        }
    }
}

}

猜你喜欢

转载自blog.csdn.net/qq_34531925/article/details/81588881