package com.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;
public class CookieUtils {
/**
* 添加并响应Cookie到客户端
* @param response Response对象
* @param cookie 需要添加的Cookie
* @param isEncode 是否对Cookie值进行编码(中文值一定要编码,否则会出异常)
*/
public static void addCookie(HttpServletResponse response,Cookie cookie,boolean isEncode) {
if(isEncode) {
try {
cookie.setValue(URLEncoder.encode(cookie.getValue(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
response.addCookie(cookie);
}
/**
* 添加并响应Cookie到客户端
* @param response Response对象
* @param key Cookie的键名
* @param value Cookie的值
* @param domain 能访问该Cookie的域名,值为null则不添加域名限制
* @param path 能访问该Cookie的目录,值为null则不添加目录限制,同一服务器下所有网站所有目录都能访问该Cookie
* @param maxAge 有效时间,单位:秒
* @param isEncode 是否对Cookie值进行编码(中文值一定要编码,否则会出异常)
*/
public static void addCookie(HttpServletResponse response,String key,String value,String domain,String path,int maxAge,boolean isEncode) {
Cookie cookie=new Cookie(key,value);
if(domain!=null&&!domain.trim().equals("")) {
cookie.setDomain(domain);
}
cookie.setPath(path);
cookie.setMaxAge(maxAge);
addCookie(response, cookie, isEncode);
}
/**
* 添加并响应Cookie到客户端
* domain默认不设置
* path默认网站根目录(避免同一服务器不同网站间Cookie相互携带)
* maxAge默认最大值不过期
* isEncode默认对Cookie值进行编码
* @param request Request对象,用于获取网站名称
* @param response Response对象
* @param key Cookie的键名
* @param value Cookie的值
*/
public static void addCookie(HttpServletRequest request,HttpServletResponse response,String key,String value) {
addCookie(response,key,value,null,request.getContextPath(),Integer.MAX_VALUE,true);
}
/**
* 移除Cookie
* @param response Response对象
* @param key Cookie的键名
* @param domain 能访问该Cookie的域名,值一定要跟添加Cookie时一致
* @param path 能访问该Cookie的目录,值一定要跟添加Cookie时一致
*/
public static void removeCookie(HttpServletResponse response,String key,String domain,String path) {
addCookie(response,key,null,domain,path,0,false);
}
/**
* 移除Cookie
* domain默认不设置
* path默认网站根目录
* @param request Request对象,用于获取网站名称
* @param response Response对象
* @param key Cookie的键名
*/
public static void removeCookie(HttpServletRequest request,HttpServletResponse response,String key) {
addCookie(response,key,null,null,request.getContextPath(),0,false);
}
/**
* 根据键名获取Cookie对象
* @param request Request对象
* @param key Cookie的键名
* @param isDecode 是否对Cookie的键进行解码(如果添加时对Cookie值编码,读取时必须解码后才能得到正常的值)
* @return Cookie对象
*/
public static Cookie getCookie(HttpServletRequest request,String key,boolean isDecode) {
Cookie[] cookies=request.getCookies();
if(cookies==null)return null;
for (Cookie cookie : cookies) {
if(cookie.getName().equals(key)) {
if(isDecode) {
try {
cookie.setValue(URLDecoder.decode(cookie.getValue(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return cookie;
}
}
return null;
}
/**
* 根据键名获取Cookie对象
* isDecode默认解码
* @param request Request对象
* @param key Cookie的键名
* @return Cookie对象
*/
public static Cookie getCookie(HttpServletRequest request,String key) {
return getCookie(request, key,true);
}
/**
* 根据键名获取Cookie的值
* @param request Request对象
* @param key Cookie的键名
* @param isDecode 是否对Cookie的键进行解码(如果添加时对Cookie值编码,读取时必须解码后才能得到正常的值)
* @return Cookie的值
*/
public static String getCookieValue(HttpServletRequest request,String key,boolean isDecode) {
Cookie cookie= getCookie(request, key,isDecode);
if(cookie==null)return null;
return cookie.getValue();
}
/**
* 根据键名获取Cookie的值
* isDecode默认解码
* @param request Request对象
* @param key Cookie的键名
* @return Cookie的值
*/
public static String getCookieValue(HttpServletRequest request,String key) {
return getCookieValue(request, key,true);
}
}
【JavaEE】CookieUtils
最新推荐文章于 2023-03-11 15:11:03 发布