java - 如何让 servlet 容器从查询字符串而不是 URL 中读取 JSESSIONID

标签 java servlets kml google-earth jsessionid

我需要能够通过将 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/

相关文章:

java - 为什么将 session 范围内的对象可序列化视为一种良好实践?

java - 通过 Apache Commons 上传流文件时,数据存储在哪里?

json - 将 JSON 转换为 KML

javascript - Google Earth api 允许使用未注册证书进行 https 连接

java - 如何格式化打印日历中包含的日期?

java - 在java中使用itext对齐PDF中的内容

java - 在 Java 中修剪二维数组的有效方法

java - 像数字字段上的 Hibernate 标准

jsp include,转发请求参数

google-maps - 路线经过点