3

我需要能够通过将 JSESSIONID 指定为 url 的查询字符串的参数而不是 URL 本身的一部分来维护会话。

换句话说,我需要保持这样的会话

http://myserver.com?jsessionid=A463B23BC4F2342FA

而不是

http://myserver.com;jsessionid=A463B23BC4F2342FA

对于 servlet 容器,我同时使用 tomcat 6.0 和 weblogic 10.3

原因:

我正在创建一个谷歌地球网络链接,它要求我为客户提出的请求保留一个会话。Google 地球不支持 cookie,而且似乎无法更改用于发出请求的 url。我只能通过将以下内容添加到我的服务器响应中的 kml 来告诉它在后续请求中附加查询字符串参数

<NetworkLinkControl>
    <cookie>JSESSIONID=A463B23BC4F2342FA</cookie>
</NetworkLinkControl>
4

2 回答 2

2

不可能。我会在您这边创建一个过滤器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 模式上,该模式涵盖可能由该站点发起的请求。或者,如果没有,就在/*.

于 2011-08-26T23:36:13.270 回答
0

为此,我们创建了自定义 Tomcat Valve。它非常简单,但特定于 Tomcat。

于 2013-09-10T13:40:40.913 回答