java CookieUtils cookie工具类

  1 package com.mohecun.common.utils;
  2 
  3 import java.io.UnsupportedEncodingException;
  4 import java.net.URLDecoder;
  5 import java.net.URLEncoder;
  6 
  7 import javax.servlet.http.Cookie;
  8 import javax.servlet.http.HttpServletRequest;
  9 import javax.servlet.http.HttpServletResponse;
 10 
 11 
 12 /**
 13  * 
 14  * Cookie 工具类
 15  *
 16  */
 17 public final class CookieUtils {
 18 
 19     /**
 20      * 得到Cookie的值, 不编码
 21      * 
 22      * @param request
 23      * @param cookieName
 24      * @return
 25      */
 26     public static String getCookieValue(HttpServletRequest request, String cookieName) {
 27         return getCookieValue(request, cookieName, false);
 28     }
 29 
 30     /**
 31      * 得到Cookie的值,
 32      * 
 33      * @param request
 34      * @param cookieName
 35      * @return
 36      */
 37     public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
 38         Cookie[] cookieList = request.getCookies();
 39         if (cookieList == null || cookieName == null) {
 40             return null;
 41         }
 42         String retValue = null;
 43         try {
 44             for (int i = 0; i < cookieList.length; i++) {
 45                 if (cookieList[i].getName().equals(cookieName)) {
 46                     if (isDecoder) {
 47                         retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
 48                     } else {
 49                         retValue = cookieList[i].getValue();
 50                     }
 51                     break;
 52                 }
 53             }
 54         } catch (UnsupportedEncodingException e) {
 55             e.printStackTrace();
 56         }
 57         return retValue;
 58     }
 59 
 60     /**
 61      * 得到Cookie的值,
 62      * 
 63      * @param request
 64      * @param cookieName
 65      * @return
 66      */
 67     public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) {
 68         Cookie[] cookieList = request.getCookies();
 69         if (cookieList == null || cookieName == null) {
 70             return null;
 71         }
 72         String retValue = null;
 73         try {
 74             for (int i = 0; i < cookieList.length; i++) {
 75                 if (cookieList[i].getName().equals(cookieName)) {
 76                     retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString);
 77                     break;
 78                 }
 79             }
 80         } catch (UnsupportedEncodingException e) {
 81              e.printStackTrace();
 82         }
 83         return retValue;
 84     }
 85 
 86     /**
 87      * 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码
 88      */
 89     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
 90             String cookieValue) {
 91         setCookie(request, response, cookieName, cookieValue, -1);
 92     }
 93 
 94     /**
 95      * 设置Cookie的值 在指定时间内生效,但不编码
 96      */
 97     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
 98             String cookieValue, int cookieMaxage) {
 99         setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);
100     }
101 
102     /**
103      * 设置Cookie的值 不设置生效时间,但编码
104      */
105     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
106             String cookieValue, boolean isEncode) {
107         setCookie(request, response, cookieName, cookieValue, -1, isEncode);
108     }
109 
110     /**
111      * 设置Cookie的值 在指定时间内生效, 编码参数
112      */
113     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
114             String cookieValue, int cookieMaxage, boolean isEncode) {
115         doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);
116     }
117 
118     /**
119      * 设置Cookie的值 在指定时间内生效, 编码参数(指定编码)
120      */
121     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
122             String cookieValue, int cookieMaxage, String encodeString) {
123         doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);
124     }
125 
126     /**
127      * 删除Cookie带cookie域名
128      */
129     public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,
130             String cookieName) {
131         doSetCookie(request, response, cookieName, "", -1, false);
132     }
133 
134     /**
135      * 设置Cookie的值,并使其在指定时间内生效
136      * 
137      * @param cookieMaxage cookie生效的最大秒数
138      */
139     private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
140             String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
141         try {
142             if (cookieValue == null) {
143                 cookieValue = "";
144             } else if (isEncode) {
145                 cookieValue = URLEncoder.encode(cookieValue, "utf-8");
146             }
147             Cookie cookie = new Cookie(cookieName, cookieValue);
148             if (cookieMaxage > 0)
149                 cookie.setMaxAge(cookieMaxage);
150             if (null != request) {// 设置域名的cookie
151                 String domainName = getDomainName(request);
152                 System.out.println(domainName);
153                 if (!"localhost".equals(domainName)) {
154                     cookie.setDomain(domainName);
155                 }
156             }
157             cookie.setPath("/");
158             response.addCookie(cookie);
159         } catch (Exception e) {
160              e.printStackTrace();
161         }
162     }
163 
164     /**
165      * 设置Cookie的值,并使其在指定时间内生效
166      * 
167      * @param cookieMaxage cookie生效的最大秒数
168      */
169     private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
170             String cookieName, String cookieValue, int cookieMaxage, String encodeString) {
171         try {
172             if (cookieValue == null) {
173                 cookieValue = "";
174             } else {
175                 cookieValue = URLEncoder.encode(cookieValue, encodeString);
176             }
177             Cookie cookie = new Cookie(cookieName, cookieValue);
178             if (cookieMaxage > 0)
179                 cookie.setMaxAge(cookieMaxage);
180             if (null != request) {// 设置域名的cookie
181                 String domainName = getDomainName(request);
182                 System.out.println(domainName);
183                 if (!"localhost".equals(domainName)) {
184                     cookie.setDomain(domainName);
185                 }
186             }
187             cookie.setPath("/");
188             response.addCookie(cookie);
189         } catch (Exception e) {
190              e.printStackTrace();
191         }
192     }
193 
194     /**
195      * 得到cookie的域名
196      */
197     private static final String getDomainName(HttpServletRequest request) {
198         String domainName = null;
199 
200         String serverName = request.getRequestURL().toString();
201         if (serverName == null || serverName.equals("")) {
202             domainName = "";
203         } else {
204             serverName = serverName.toLowerCase();
205             serverName = serverName.substring(7);
206             final int end = serverName.indexOf("/");
207             serverName = serverName.substring(0, end);
208             final String[] domains = serverName.split("\\.");
209             int len = domains.length;
210             if (len > 3) {
211                 // www.xxx.com.cn
212                 domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];
213             } else if (len <= 3 && len > 1) {
214                 // xxx.com or xxx.cn
215                 domainName = "." + domains[len - 2] + "." + domains[len - 1];
216             } else {
217                 domainName = serverName;
218             }
219         }
220 
221         if (domainName != null && domainName.indexOf(":") > 0) {
222             String[] ary = domainName.split("\\:");
223             domainName = ary[0];
224         }
225         return domainName;
226     }
227 
228 }