簡體   English   中英

如何讓servlet容器從查詢字符串而不是URL中讀取JSESSIONID

[英]How do I get a servlet container to read JSESSIONID from the query string rather than from the URL

我需要能夠通過將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>

不可能。 我會創建一個過濾器 ,只要URL在查詢字符串中帶有JSESSIONID ,就會將請求重定向到正確的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模式,該模式涵蓋可能由該站點發起的請求。 或者如果沒有,只需在/*

我們為此創建了自定義Tomcat Valve。 它非常簡單,但特定於Tomcat。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM