目前项目有需求做了一个tomcat+redis的PAcount服务器,存储整个平台的session数据,整个业务侧不存储任何session信息,下面逻辑就是如何远程登陆并根据sessionID获取服务端session的逻辑
public class CookieSotreUtils {
public static final String method = "POST";
public static final String charset = "UTF-8";
public static final String client_serviceUrl = "clientLogin";
public static final String mgr_serviceUrl = "mgrLogin";
public static final String MGR_COOKIE_KEY = "MGR_SESSION_ID";
public static final String CLIENT_COOKIE_KEY = "CLIENT_SESSION_ID";
public static String postParameters(String urlString, String param, HttpServletResponse response, HttpServletRequest request) throws IOException {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod(method);
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(false);
connection.setRequestProperty("Connection", "keep-alive");
connection.setRequestProperty("Accept-Language", "zh-cn,zh;q=0.8");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate");
connection.setRequestProperty("Accept", "application/json, text/javascript, */*; q=0.01");
connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
connection.setRequestProperty("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");
connection.setRequestProperty("X-Requested-With", "XMLHttpRequest");
String path = url.getPath();
if (path.contains("client") || path.contains("Cutomer")) {
Cookie cookie = getCookieByName(request, CLIENT_COOKIE_KEY);
if (cookie != null) {
connection.setRequestProperty("Cookie", "JSESSIONID=" + cookie.getValue());
}
} else {
Cookie cookie = getCookieByName(request, MGR_COOKIE_KEY);
if (cookie != null) {
connection.setRequestProperty("Cookie", "JSESSIONID=" + cookie.getValue());
}
}
connection.connect();
DataOutputStream dataOut = new DataOutputStream(connection.getOutputStream());
dataOut.writeBytes(param);
dataOut.flush();
dataOut.close();
String cookieValue = connection.getHeaderField("Set-Cookie");
if (StringUtils.isNotEmpty(cookieValue)) {
String JSESSIONID = cookieValue.substring("JSESSIONID=".length(), cookieValue.indexOf(";"));
if (urlString.contains(client_serviceUrl)) {
setCookie(CLIENT_COOKIE_KEY, JSESSIONID, response);
} else if (urlString.contains(mgr_serviceUrl)) {
setCookie(MGR_COOKIE_KEY, JSESSIONID, response);
}
}
String result = IOUtils.toString(connection.getInputStream(), charset);
connection.disconnect();
return result;
}
/**
* 获取所有的cookie信息转为map集合
*/
public static Map<String, Cookie> ReadCookieMap(HttpServletRequest request) {
Map<String, Cookie> cookieMap = new HashMap<>();
Cookie[] cookies = request.getCookies();
if (null != cookies) {
for (Cookie cookie : cookies) {
cookieMap.put(cookie.getName(), cookie);
}
}
return cookieMap;
}
/**
* 根据名字获取cookie
*/
public static Cookie getCookieByName(HttpServletRequest request, String name) {
Map<String, Cookie> cookieMap = ReadCookieMap(request);
if (cookieMap.containsKey(name)) {
return cookieMap.get(name);
} else {
return null;
}
}
/**
* 设置cookie信息(sessionId)
*
* @param key cookie key
* @param val cookie value
*/
public static void setCookie(String key, String val, HttpServletResponse response) {
Cookie cookie = new Cookie(key, val);
if (key.equals(MGR_COOKIE_KEY)) {
cookie.setDomain(".qiku.com");
} else {
cookie.setDomain(".360os.com");
}
//24小时过期
cookie.setMaxAge(60 * 60 * 24);
cookie.setPath("/");
response.addCookie(cookie);
}
/**
* 删除cookie信息(sessionId)
*
* @param cookie 要删除的cookie
*/
public static void removeCookie(Cookie cookie) {
cookie.setValue(null);
String key = cookie.getName();
if (key.equals(MGR_COOKIE_KEY)) {
cookie.setDomain(".qiku.com");
} else {
cookie.setDomain(".360os.com");
}
cookie.setMaxAge(0);
cookie.setPath("/");
}
/**
* 删除服务端cookie信息(sessionId)
*/
public static void removeMgrCookie(HttpServletRequest request, HttpServletResponse response) {
Cookie cookie = getCookieByName(request, MGR_COOKIE_KEY);
if (cookie != null) {
removeCookie(cookie);
response.addCookie(cookie);
}
}
/**
* 删除客户端cookie信息(sessionId)
*/
public static void removeClientCookie(HttpServletRequest request, HttpServletResponse response) {
Cookie cookie = getCookieByName(request, CLIENT_COOKIE_KEY);
if (cookie != null) {
removeCookie(cookie);
response.addCookie(cookie);
}
}
}