Java后端Cookie工具类(设置Cookie有效时间得到Cookie的域名等方法)

Posted 砖业洋__

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java后端Cookie工具类(设置Cookie有效时间得到Cookie的域名等方法)相关的知识,希望对你有一定的参考价值。

在这里总结一些后端处理Cookie的工具类方法,供参考

调用就可以这样

// 设置cookie
CookieUtils.setCookie(request, response, "user", JSONObject.toJSONString(usersVO), true);

// 清除cookie
CookieUtils.deleteCookie(request, response, "user");

工具类如下:

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)
            	// maxAge源码中默认设置为-1,即maxAge必须手动设置,否则一直是过期状态
                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("\\\\d1,3\\\\.\\\\d1,3\\\\.\\\\d1,3\\\\.\\\\d1,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;  
      



欢迎一键三连~

有问题请留言,大家一起探讨学习

----------------------Talk is cheap, show me the code-----------------------

以上是关于Java后端Cookie工具类(设置Cookie有效时间得到Cookie的域名等方法)的主要内容,如果未能解决你的问题,请参考以下文章

Java后端Cookie工具类(设置Cookie有效时间得到Cookie的域名等方法)

Java Cookie工具类

Cookie工具类(获取cookie,设置cookie)

Cookie工具类 - CookieUtil.java

java-cookie工具类

java CookieUtils cookie工具类