我需要能够通过将JSESSIONID指定为url的查询字符串的参数而不是URL本身的一部分来维护会话。
换句话说,我需要维持这样的会议
http://myserver.com?jsessionid=A463B23BC4F2342FA
而不是
http://myserver.com;jsessionid=A463B23BC4F2342FA
对于servlet容器,我正在使用tomcat 6.0和weblogic 10.3
原因:
我正在创建一个Google地球网络链接,要求我为客户提出的请求保留会话。 Google地球不支持Cookie,似乎无法更改用于发出请求的网址。我只能通过在服务器响应中向kml添加以下内容来告诉它在后续请求中附加查询字符串参数
<NetworkLinkControl>
<cookie>JSESSIONID=A463B23BC4F2342FA</cookie>
</NetworkLinkControl>
答案 0 :(得分:2)
不可能。我会在您身边创建filter,只要网址在查询字符串中显示JSESSIONID
,就会将请求重定向到正确的网址。
基本启动示例:
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
if ("GET".equals(request.getMethod()) && request.getParameter("JSESSIONID") != null) {
response.sendRedirect(request.getRequestURL().append(";JSESSIONID=")
.append(request.getParameter("JSESSIONID")).toString());
} else {
chain.doFilter(request, response);
}
}
将此映射到URL模式,该模式涵盖可能由该网站发起的请求。或者,如果没有,只需/*
。
答案 1 :(得分:0)
我们为此创建了自定义Tomcat Valve。它非常简单,但特定于Tomcat。