Cookie保存的工具类

本文涉及的产品
.cn 域名,1个 12个月
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80546781 import java.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80546781
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * Cookie 工具类
 *
 */
public final class CookieUtils {

   protected static final Logger logger = LoggerFactory.getLogger(CookieUtils.class);

   /**
    * 得到Cookie的值, 不编码
    * 
    * @param request
    * @param cookieName
    * @return
    */
   public static String getCookieValue(HttpServletRequest request, String cookieName) {
      return getCookieValue(request, cookieName, false);
   }

   /**
    * 得到Cookie的值,
    * 
    * @param request
    * @param cookieName
    * @return
    */
   public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
      Cookie[] cookieList = request.getCookies();
      if (cookieList == null || cookieName == null){
         return null;         
      }
      String retValue = null;
      try {
         for (int i = 0; i < cookieList.length; i++) {
            if (cookieList[i].getName().equals(cookieName)) {
               if (isDecoder) {
                  retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
               } else {
                  retValue = cookieList[i].getValue();
               }
               break;
            }
         }
      } catch (UnsupportedEncodingException e) {
         logger.error("Cookie Decode Error.", e);
      }
      return retValue;
   }

   /**
    * 得到Cookie的值,
    * 
    * @param request
    * @param cookieName
    * @return
    */
   public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) {
      Cookie[] cookieList = request.getCookies();
      if (cookieList == null || cookieName == null){
         return null;         
      }
      String retValue = null;
      try {
         for (int i = 0; i < cookieList.length; i++) {
            if (cookieList[i].getName().equals(cookieName)) {
               retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString);
               break;
            }
         }
      } catch (UnsupportedEncodingException e) {
         logger.error("Cookie Decode Error.", e);
      }
      return retValue;
   }

   /**
    * 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码
    */
   public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue) {
      setCookie(request, response, cookieName, cookieValue, -1);
   }

   /**
    * 设置Cookie的值 在指定时间内生效,但不编码
    */
   public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage) {
      setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);
   }

   /**
    * 设置Cookie的值 不设置生效时间,但编码
    */
   public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, boolean isEncode) {
      setCookie(request, response, cookieName, cookieValue, -1, isEncode);
   }

   /**
    * 设置Cookie的值 在指定时间内生效, 编码参数
    */
   public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
      doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);
   }

   /**
    * 设置Cookie的值 在指定时间内生效, 编码参数(指定编码)
    */
   public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, String encodeString) {
      doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);
   }

   /**
    * 删除Cookie带cookie域名
    */
   public static void deleteCookie(HttpServletRequest request, HttpServletResponse response, String cookieName) {
      doSetCookie(request, response, cookieName, "", -1, false);
   }

   /**
    * 设置Cookie的值,并使其在指定时间内生效
    * 
    * @param cookieMaxage
    *            cookie生效的最大秒数
    */
   private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
      try {
         if (cookieValue == null) {
            cookieValue = "";
         } else if (isEncode) {
            cookieValue = URLEncoder.encode(cookieValue, "utf-8");
         }
         Cookie cookie = new Cookie(cookieName, cookieValue);
         if (cookieMaxage > 0)
            cookie.setMaxAge(cookieMaxage);
         if (null != request)// 设置域名的cookie
            cookie.setDomain(getDomainName(request));
         cookie.setPath("/");
         response.addCookie(cookie);
      } catch (Exception e) {
         logger.error("Cookie Encode Error.", e);
      }
   }

   /**
    * 设置Cookie的值,并使其在指定时间内生效
    * 
    * @param cookieMaxage
    *            cookie生效的最大秒数
    */
   private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, String cookieValue, int cookieMaxage, String encodeString) {
      try {
         if (cookieValue == null) {
            cookieValue = "";
         } else {
            cookieValue = URLEncoder.encode(cookieValue, encodeString);
         }
         Cookie cookie = new Cookie(cookieName, cookieValue);
         if (cookieMaxage > 0)
            cookie.setMaxAge(cookieMaxage);
         if (null != request)// 设置域名的cookie
            cookie.setDomain(getDomainName(request));
         cookie.setPath("/");
         response.addCookie(cookie);
      } catch (Exception e) {
         logger.error("Cookie Encode Error.", e);
      }
   }

   /**
    * 得到cookie的域名
    */
   private static final String getDomainName(HttpServletRequest request) {
      String domainName = null;

      String serverName = request.getRequestURL().toString();
      if (serverName == null || serverName.equals("")) {
         domainName = "";
      } else {
         serverName = serverName.toLowerCase();
         serverName = serverName.substring(7);
         final int end = serverName.indexOf("/");
         serverName = serverName.substring(0, end);
         final String[] domains = serverName.split("\\.");
         int len = domains.length;
         if (len > 3) {
            // www.xxx.com.cn
            domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];
         } else if (len <= 3 && len > 1) {
            // xxx.com or xxx.cn
            domainName = "." + domains[len - 2] + "." + domains[len - 1];
         } else {
            domainName = serverName;
         }
      }

      if (domainName != null && domainName.indexOf(":") > 0) {
         String[] ary = domainName.split("\\:");
         domainName = ary[0];
      }
      return domainName;
   }

}
相关文章
|
4月前
|
JSON JavaScript 前端开发
Vue项目使用Cookie,以Json格式存入与读取Cookie,设置过期时间以及删除操作
这篇文章介绍了在Vue项目中如何使用JavaScript操作Cookie,包括设置、读取、设置过期时间以及删除Cookie的方法。
296 0
|
7月前
|
存储 安全 对象存储
Cookie和Session的区别:从原理到应用
【2月更文挑战第18天】
675 6
|
7月前
|
数据安全/隐私保护
Session 管理以及Cookie 应用最简单实例
Session 管理以及Cookie 应用最简单实例
|
XML NoSQL Java
SpringSession的源码解析(生成session,保存session,写入cookie全流程分析)
上一篇文章主要介绍了如何使用SpringSession,其实SpringSession的使用并不是很难,无非就是引入依赖,加下配置。但是,这仅仅只是知其然,要知其所以然,我们还是需要深入源码去理解。
681 0
SpringSession的源码解析(生成session,保存session,写入cookie全流程分析)
|
Java
会话技术概述、Cookie常用属性和方法及Session常用方法和生命周期
会话技术概述、Cookie常用属性和方法及Session常用方法和生命周期
190 0
|
数据采集 Python
使用urllib设置代理和传递/保存cookie
使用urllib设置代理和传递/保存cookie
113 0
|
存储 数据采集 缓存
详细解析cookie,sessionStroage和localStroage的区别
详细解析cookie,sessionStroage和localStroage的区别 前面我们说到了JavaScript中的缓存对象,主要是cookie,sessionStroage和localStroage,今天我们来讲一下这三者之间的区别。 共同点 都是保存在浏览器端,且同源的。(所谓同源就是协议,域名,端口号相同)。 都是字符串类型的键值对。 区别 1.cookie HTTP Cookie简称cookie,在HTTP请求发送Set-Cookie HTTP头作为响应的一部分。通过name=value的形式存储 cookie的构成: 名称:n
详细解析cookie,sessionStroage和localStroage的区别
session对象和Cookie对象的使用方法以及区别
session对象和Cookie对象的使用方法以及区别
session对象和Cookie对象的使用方法以及区别
|
存储 Java API
创建session之不支持cookie的方法
创建session之response.encodeURL 详解
135 0