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 }