212 lines
7.9 KiB
Java
212 lines
7.9 KiB
Java
package com.example.demo.service;
|
|
|
|
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.net.URLDecoder;
|
|
import java.net.URLEncoder;
|
|
|
|
public class Cookie {
|
|
final static Logger logger = LoggerFactory.getLogger(Cookie.class);
|
|
|
|
|
|
public static String getCookieValue(HttpServletRequest request, String cookieName) {
|
|
return getCookieValue(request, cookieName, false);
|
|
}
|
|
|
|
|
|
public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
|
|
jakarta.servlet.http.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;
|
|
}
|
|
|
|
|
|
public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) {
|
|
jakarta.servlet.http.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;
|
|
}
|
|
|
|
|
|
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
|
|
String cookieValue) {
|
|
setCookie(request, response, cookieName, cookieValue, 60*60);
|
|
}
|
|
|
|
|
|
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
|
|
String cookieValue, int cookieMaxage) {
|
|
setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);
|
|
}
|
|
|
|
|
|
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
|
|
String cookieValue, boolean isEncode) {
|
|
setCookie(request, response, cookieName, cookieValue, -1, isEncode);
|
|
}
|
|
|
|
|
|
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
|
|
String cookieValue, int cookieMaxage, boolean isEncode) {
|
|
doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);
|
|
}
|
|
|
|
|
|
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
|
|
String cookieValue, int cookieMaxage, String encodeString) {
|
|
doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);
|
|
}
|
|
|
|
|
|
public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,
|
|
String cookieName) {
|
|
doSetCookie(request, response, cookieName, null, -1, false);
|
|
// doSetCookie(request, response, cookieName, "", -1, false);
|
|
}
|
|
|
|
|
|
|
|
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");
|
|
}
|
|
jakarta.servlet.http.Cookie cookie = new jakarta.servlet.http.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();
|
|
}
|
|
}
|
|
|
|
|
|
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);
|
|
}
|
|
jakarta.servlet.http.Cookie cookie = new jakarta.servlet.http.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();
|
|
}
|
|
}
|
|
|
|
|
|
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;
|
|
}
|
|
|
|
}
|