分享一个我正在使用的CookieUtils工具类

Lewis
2021-04-07 / 0 评论 / 102 阅读 / 正在检测是否收录...

CookieUtils包含功能

  1. 得到Cookie的值,是否解编码
  2. 设置Cookie的值 不设置生效时间默认浏览器关闭即失效
  3. 设置Cookie的值 在指定时间内生效
  4. 删除Cookie带cookie域名
  5. 设置Cookie的值,并使其在指定时间内生效
  6. 得到cookie的域名
  7. 判断是否是一个IP

    代码如下:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;
    import java.net.URLEncoder;
    
    
    public final class CookieUtils {
    
     final static Logger logger = LoggerFactory.getLogger(CookieUtils.class);
     
     /**
      * 
      * @Description: 得到Cookie的值, 不编码
      * @param request
      * @param cookieName
      * @return
      */
     public static String getCookieValue(HttpServletRequest request, String cookieName) {
         return getCookieValue(request, cookieName, false);
     }
     
     /**
      * 
      * @Description: 得到Cookie的值
      * @param request
      * @param cookieName
      * @param isDecoder
      * @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) {
             e.printStackTrace();
         }
         return retValue;
     }
    
     /**
      * 
      * @Description: 得到Cookie的值
      * @param request
      * @param cookieName
      * @param encodeString
      * @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) {
              e.printStackTrace();
         }
         return retValue;
     }
    
     /**
      * 
      * @Description: 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码
      * @param request
      * @param response
      * @param cookieName
      * @param cookieValue
      */
     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
             String cookieValue) {
         setCookie(request, response, cookieName, cookieValue, -1);
     }
    
     /**
      * 
      * @Description: 设置Cookie的值 在指定时间内生效,但不编码
      * @param request
      * @param response
      * @param cookieName
      * @param cookieValue
      * @param cookieMaxage
      */
     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
             String cookieValue, int cookieMaxage) {
         setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);
     }
    
     /**
      * 
      * @Description: 设置Cookie的值 不设置生效时间,但编码
      * 在服务器被创建,返回给客户端,并且保存客户端
      * 如果设置了SETMAXAGE(int seconds),会把cookie保存在客户端的硬盘中
      * 如果没有设置,会默认把cookie保存在浏览器的内存中
      * 一旦设置setPath():只能通过设置的路径才能获取到当前的cookie信息
      * @param request
      * @param response
      * @param cookieName
      * @param cookieValue
      * @param isEncode
      */
     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
             String cookieValue, boolean isEncode) {
         setCookie(request, response, cookieName, cookieValue, -1, isEncode);
     }
    
    /**
     * 
     * @Description: 设置Cookie的值 在指定时间内生效, 编码参数
     * @param request
     * @param response
     * @param cookieName
     * @param cookieValue
     * @param cookieMaxage
     * @param isEncode
     */
     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
             String cookieValue, int cookieMaxage, boolean isEncode) {
         doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);
     }
    
     /**
      * 
      * @Description: 设置Cookie的值 在指定时间内生效, 编码参数(指定编码)
      * @param request
      * @param response
      * @param cookieName
      * @param cookieValue
      * @param cookieMaxage
      * @param encodeString
      */
     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
             String cookieValue, int cookieMaxage, String encodeString) {
         doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);
     }
    
     /**
      * 
      * @Description: 删除Cookie带cookie域名
      * @param request
      * @param response
      * @param cookieName
      */
     public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,
             String cookieName) {
         doSetCookie(request, response, cookieName, null, -1, false);
    //        doSetCookie(request, response, cookieName, "", -1, false);
     }
    
     
     /**
      * 
      * @Description: 设置Cookie的值,并使其在指定时间内生效
      * @param request
      * @param response
      * @param cookieName
      * @param cookieValue
      * @param cookieMaxage    cookie生效的最大秒数
      * @param isEncode
      */
     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
                 String domainName = getDomainName(request);
                 logger.info("========== domainName: {} ==========", domainName);
                 if (!"localhost".equals(domainName)) {
                     cookie.setDomain(domainName);
                 }
             }
             cookie.setPath("/");
             response.addCookie(cookie);
         } catch (Exception e) {
              e.printStackTrace();
         }
     }
    
     /**
      * 
      * @Description: 设置Cookie的值,并使其在指定时间内生效
      * @param request
      * @param response
      * @param cookieName
      * @param cookieValue
      * @param cookieMaxage    cookie生效的最大秒数
      * @param encodeString
      */
     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
                 String domainName = getDomainName(request);
                 logger.info("========== domainName: {} ==========", domainName);
                 if (!"localhost".equals(domainName)) {
                     cookie.setDomain(domainName);
                 }
             }
             cookie.setPath("/");
             response.addCookie(cookie);
         } catch (Exception e) {
              e.printStackTrace();
         }
     }
    
     /**
      * 
      * @Description: 得到cookie的域名
      * @return
      */
     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);
             if (serverName.indexOf(":") > 0) {
                 String[] ary = serverName.split("\\:");
                 serverName = ary[0];
             }
    
             final String[] domains = serverName.split("\\.");
             int len = domains.length;
             if (len > 3 && !isIp(serverName)) {
                 // 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;
             }
         }
         return domainName;
     }
     
     public static String trimSpaces(String IP){//去掉IP字符串前后所有的空格  
         while(IP.startsWith(" ")){  
                IP= IP.substring(1,IP.length()).trim();  
             }  
         while(IP.endsWith(" ")){  
                IP= IP.substring(0,IP.length()-1).trim();  
             }  
         return IP;  
     }  
     
     public static boolean isIp(String IP){//判断是否是一个IP  
         boolean b = false;  
         IP = trimSpaces(IP);  
         if(IP.matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}")){  
             String s[] = IP.split("\\.");  
             if(Integer.parseInt(s[0])<255)  
                 if(Integer.parseInt(s[1])<255)  
                     if(Integer.parseInt(s[2])<255)  
                         if(Integer.parseInt(s[3])<255)  
                             b = true;  
         }  
         return b;  
     }  
    
    }
0

评论

博主关闭了当前页面的评论