我需要能够通过将 JSESSIONID 指定为 url 的查询字符串的参数而不是 URL 本身的一部分来维护 session 。
换句话说,我需要保持这样的 session
http://myserver.com?jsessionid=A463B23BC4F2342FA
而不是
http://myserver.com;jsessionid=A463B23BC4F2342FA
对于 servlet 容器,我同时使用 tomcat 6.0 和 weblogic 10.3
原因:
我正在创建一个 Google 地球网络链接,它要求我为客户端发出的请求保持 session 。 Google 地球不支持 cookie,而且似乎无法更改用于发出请求的 url。我只能通过将以下内容添加到服务器响应中的 kml 来告诉它在后续请求中附加查询字符串参数
<NetworkLinkControl>
<cookie>JSESSIONID=A463B23BC4F2342FA</cookie>
</NetworkLinkControl>
最佳答案
不可能。我会在你这边创建一个 filter只要查询字符串中带有 JSESSIONID
的 URL 到达,它就会将请求重定向到正确的 URL。
基本启动示例:
@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 模式上,该模式涵盖可能由该站点发起的请求。或者如果没有,就在 /*
上。
关于java - 如何让 servlet 容器从查询字符串而不是 URL 中读取 JSESSIONID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7211480/