0
点赞
收藏
分享

微信扫一扫

CookieUtil

小磊z 2024-11-09 阅读 1

package com.hz.tgb.web;

import com.hz.tgb.crypto.MD5Util;
import com.hz.tgb.crypto.base64.Base64;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

public class CookieUtil {
	/**
	 * 保存cookie时的cookieName
	 */
	private static String cookieDomainName = "ycxcLogin";
	/**
	 * 加密cookie时的网站自定码
	 */
	private static final String webKey = "ycxc";
	/**
	 * 设置cookie有效期是一个星期,根据需要自定义
	 */
	private static final long cookieMaxAge = 60 * 60 * 24 * 7 * 1; 
	
	
	public CookieUtil(String cookieDomainName)
	{
		CookieUtil.cookieDomainName = cookieDomainName;
	}
	
	
	/**
	 * 传递进来的map对象中封装了在登陆时填写的用户名与密码
	 * @param map  
	 * mapvalue  userName:登录用户名, password:登录密码,loginType 登錄類型
	 * @param response
	 */
	public static void saveCookie(Map<String, Object> map, HttpServletResponse response) {

		//cookie的有效期
		long validTime = System.currentTimeMillis() + (cookieMaxAge * 1000);
		//MD5加密用户详细信息
		String cookieValueWithMd5 = MD5Util.md5(map.get("userName").toString() + ":" + map.get("password").toString()+ ":" +map.get("loginType").toString()+ ":" + validTime + ":" + CookieUtil.webKey);
		//将要被保存的完整的Cookie值
		String cookieValue = map.get("userName").toString() + ":" +map.get("loginType").toString()+ ":"+ validTime + ":" + cookieValueWithMd5;
		//再一次对Cookie的值进行BASE64编码
		String cookieValueBase64 = new String(Base64.encode(cookieValue.getBytes()));
		//开始保存Cookie
		Cookie cookie = new Cookie(cookieDomainName, cookieValueBase64);

		//存一周(这个值应该大于或等于validTime)
		cookie.setMaxAge(60 * 60 * 24 * 7 * 2);
		//cookie有效路径是网站根目录
		cookie.setPath("/");
		//向客户端写入
		response.addCookie(cookie);

	}
	
	/**
	 * 登录用户已存在cookie  修改coolie中的值
	 * @param autoCookie 已存在的登陆cookie
	 * @param map
	 * mapvalue  userName:登录用户名, password:登录密码,loginType 登錄類型
	 * @param response
	 */
	public static void updateCookie(Cookie autoCookie, Map<String, Object> map, HttpServletResponse response){
		//cookie的有效期
		long validTime = System.currentTimeMillis() + (cookieMaxAge * 1000);
		//MD5加密用户详细信息
		String cookieValueWithMd5 = MD5Util.md5(map.get("userName").toString() + ":" + map.get("password").toString()+ ":" +map.get("loginType").toString()+ ":" + validTime + ":" + webKey);
		//将要被保存的完整的Cookie值
		String cookieValue = map.get("userName").toString() + ":" +map.get("loginType").toString()+ ":" + validTime + ":" + cookieValueWithMd5;
		//再一次对Cookie的值进行BASE64编码
		String cookieValueBase64 = new String(Base64.encode(cookieValue.getBytes()));
		//开始保存Cookie
		autoCookie.setValue(cookieValueBase64);
		//存一周(这个值应该大于或等于validTime)
		autoCookie.setMaxAge(60 * 60 * 24 * 7 * 2);
		//cookie有效路径是网站根目录
		autoCookie.setPath("/");
		//向客户端写入
		response.addCookie(autoCookie);
	}
	
	
	/**
	 * 用户注销时,清除Cookie
	 * @param response
	 */
	public static void clearCookie( HttpServletResponse response){
		Cookie cookie = new Cookie(cookieDomainName, null);
		cookie.setMaxAge(0);
		cookie.setPath("/");
		response.addCookie(cookie);
	}

	public static String getCookieValue(Cookie[] cookies, String name) {
		if (cookies == null) {
			return null;
		}
		for (Cookie c : cookies) {
			if (name.equals(c.getName())) {
				return c.getValue();
			}
		}
		return null;
	}

	/**
	 * 在取cookie值,如果获取失败,将用空字符串代替null。
	 * 同时把代码中多处重复代码都替换成这个
	 */
	public static String getCookieValueWithEmptyStrReplaceNull(HttpServletRequest request, String name) {
		Cookie[] cookies = request.getCookies();
		String defaultVal = "";
		if (cookies != null) {
			for (Cookie c : cookies) {
				if (name.equals(c.getName())) {
					defaultVal = c.getValue();
					break;
				}
			}
		}
		return defaultVal;
	}

	/**
	 * 记录当前的所有cookie
	 */
	public static String getAllCookie(HttpServletRequest request) {
		Cookie[] cookies = request.getCookies();
		StringBuffer cookieSb = new StringBuffer();
		if (cookies != null) {
			for (Cookie ck : cookies) {
				cookieSb.append(ck.getName());
				cookieSb.append(",");
				cookieSb.append(ck.getValue());
				cookieSb.append(";");
			}
		}
		return cookieSb.toString();
	}

	public static String getRfcCookies(HttpServletRequest request, String domain) {
		Cookie[] cookies = request.getCookies();
		StringBuffer cookieSb = new StringBuffer();
		if (cookies != null) {
			for (Cookie ck : cookies) {
				cookieSb.append(ck.getName());
				cookieSb.append("=");
				cookieSb.append(ck.getValue());
				cookieSb.append(";");
			}
		}
		if (StringUtils.isNotEmpty(domain)) {
			cookieSb.append("domain=").append(domain).append(";");
		}
		return cookieSb.toString();
	}

	public static Cookie getCookie(HttpServletRequest request, String cookieName) {
		Cookie[] cookies = request.getCookies();
		if (cookies == null) {
			return null;
		}
		Cookie cookie = null;
		for (Cookie ck : cookies) {
			String ckName = ck.getName();
			if (cookieName.equals(ckName)) {
				cookie = ck;
				break;
			}
		}
		return cookie;
	}

	public static void writeTouchCookie(HttpServletResponse response, HttpServletRequest request, int maxAge, String cName, String cValue, String domain) {
		Cookie cookie = CookieUtil.getCookie(request, cName);
		if (cookie == null) {
			cookie = new Cookie(cName, cValue);
		} else {
			cookie.setValue(cValue);
		}
		cookie.setMaxAge(maxAge);
		cookie.setDomain(domain);
		cookie.setPath("/");
		response.addCookie(cookie);
	}

	public static void writeTouchCookie(HttpServletResponse response, HttpServletRequest request, String cName, String cValue, String domain, int hour) {
		writeTouchCookie(response, request, hour * 3600, cName, cValue, domain);
	}

	public static void setCookie(HttpServletRequest request, HttpServletResponse response, String name, String value, int maxAge) {
		Cookie cookie = new Cookie(name, value == null ? "" : value);
		cookie.setMaxAge(maxAge);
		cookie.setPath(getPath(request));
		response.addCookie(cookie);
	}

	private static String getPath(HttpServletRequest request) {
		String path = request.getContextPath();
		return (path == null || path.length() == 0) ? "/" : path;
	}
	
}

举报
0 条评论