1. 程式人生 > 其它 >Java Cookie工具類CookieUtils

Java Cookie工具類CookieUtils

技術標籤:Javacookiejava

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; } }