JAVA远程session访问,访问独立SESSION服务器
目前项目有需求做了一个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); } } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。