2011-08-26 4 views
3

JSESSIONID를 URL의 쿼리 문자열의 매개 변수로 지정함으로써 세션을 유지 관리 할 수 ​​있어야합니다. URL 그 자체.서블릿 컨테이너에서 URL이 아닌 쿼리 문자열에서 JSESSIONID를 읽으려면 어떻게해야합니까?

나는 다른 말은 내가 모두 바람둥이 6.0 및 웹 로직 10.3

을 사용하고 서블릿 컨테이너에 대한

http://myserver.com;jsessionid=A463B23BC4F2342FA

대신이

http://myserver.com?jsessionid=A463B23BC4F2342FA

같은 세션을 유지할 필요

이유 :

Google 어스 네트워크 링크를 만들면 클라이언트의 요청에 따라 세션을 유지해야합니다. Google 어스는 쿠키를 지원하지 않으며 요청을하기 위해 사용하는 URL을 변경할 수있는 방법이 없습니다. 다음 명령을 kml에 추가하면 쿼리 문자열 매개 변수를 추가 할 수 있습니다.

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

답변

2

불가능합니다. 쿼리 문자열에 JSESSIONID과 함께 URL이 도착할 때마다 적절한 URL로 요청을 리디렉션하는 filter을 직접 작성합니다.

기본 킥오프 예 : 잠재적으로 해당 사이트에 의해 발생한 수 요청을 커버하는 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); 
    } 
} 

지도이. 또는 아무도없는 경우에만 /*에 있습니다.

0

우리는이 목적으로 사용자 정의 Tomcat 밸브를 만들었습니다. 그것은 꽤 간단하지만 Tomcat 특정.