[英]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.