package com.hehenian.common.memcache; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import javax.servlet.http.HttpSession; public class HttpSessionResponseWrapper extends HttpServletResponseWrapper { private HttpSession session; private HttpSessionManager sessionManager; private final boolean sessionFromCookie; public HttpSessionResponseWrapper(HttpServletResponse response, HttpSession session, HttpSessionManager sessionManager, boolean sessionFromCookie) { super(response); this.session = session; this.sessionManager = sessionManager; this.sessionFromCookie = sessionFromCookie; } @Override public String encodeRedirectUrl(String url) { return encodeRedirectURL(url); } @Override public String encodeRedirectURL(String url) { return encodeURL(url); } @Override public String encodeUrl(String url) { return encodeURL(url); } @Override public String encodeURL(String url) { if (sessionFromCookie) { return url; } StringBuilder sb = new StringBuilder(); // standard url rewriting int p = url.indexOf('?'); if (p == 0) { sb.append(url); } else if (p > 0) { sb.append(url, 0, p); sb.append(';'); sb.append(sessionManager.getSessionKey()); sb.append('='); sb.append(session.getId()); sb.append(url, p, url.length()); } else if ((p = url.indexOf('#')) >= 0) { sb.append(url, 0, p); sb.append(';'); sb.append(sessionManager.getSessionKey()); sb.append('='); sb.append(session.getId()); sb.append(url, p, url.length()); } else { sb.append(url); sb.append(';'); sb.append(sessionManager.getSessionKey()); sb.append('='); sb.append(session.getId()); } return sb.toString(); } }