自定义的操作Cookie的工具类

Posted kitor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义的操作Cookie的工具类相关的知识,希望对你有一定的参考价值。

可以在SpringMVC等环境中使用的操作Cookie的工具类

package utils;

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;


/**
 * 
 * Cookie 工具类
 *
 */
public final class CookieUtil 

    /**
     * 得到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) 
            e.printStackTrace();
        
        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) 
             e.printStackTrace();
        
        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
                String domainName = getDomainName(request);
                System.out.println(domainName);
                if (!"localhost".equals(domainName)) 
                    cookie.setDomain(domainName);
                
            
            cookie.setPath("/");
            response.addCookie(cookie);
         catch (Exception e) 
             e.printStackTrace();
        
    

    /**
     * 设置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
                String domainName = getDomainName(request);
                System.out.println(domainName);
                if (!"localhost".equals(domainName)) 
                    cookie.setDomain(domainName);
                
            
            cookie.setPath("/");
            response.addCookie(cookie);
         catch (Exception e) 
             e.printStackTrace();
        
    

    /**
     * 得到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;
    

 

以上是关于自定义的操作Cookie的工具类的主要内容,如果未能解决你的问题,请参考以下文章

自定义MVC框架之工具类-模型类

自定义的操作Cookie的工具类

自定义的操作Cookie的工具类

类自定义排序的 C++ 向量

模仿CountDownLatch类自定义倒时计时器

CakePHP 类自定义导入