HttpSession 객체는 응용 프로그램 (또는 서블릿 컨텍스트) 수준에서 범위가 지정됩니다. Java™ Servlet Specification에서
발췌
: 개체가 응용 프로그램 (또는 서블릿 컨텍스트) 수준에서 범위해야
의 HttpSession
. 에 사용 된 쿠키와 같은 기본 메커니즘은 다른 컨텍스트에 대해 동일 할 수 있지만 해당 개체의 특성을 포함하여 참조 된 개체는 절대로 콘테이너에 의해 이 컨텍스트간에 공유되어서는 안됩니다.
이 예제를 통해 이러한 요구 사항을 설명하기 위해 :
를 서블릿이 다른 웹 응용 프로그램에서 서블릿을 호출 할 RequestDispatcher의를 사용하는 경우, 어떤 세션 생성 및 서블릿 볼은 볼 것과 달라야합니다 호출되는 서블릿 호출.
이 시나리오를 처리 할 수있는 접근 방법 :
request.setAttribute("userToken", <token>);
RequestDispatcher requestDispatcher = getServletContext().getContext(
"/otherWebappContext").getRequestDispatcher("/resource");
requestDispatcher.forward(request, response);
그러나 어떤 :
을 당신은 아래 servletContext.getContext("/otherWebappContext") 방법을 사용하여 다른 하나 서블릿 컨텍스트에 사용할 수있는 리소스에 대한 액세스를 얻을 수 있습니다 호출중인 서블릿에 대해 생성 된 세션이 호출 서블릿의 세션과 다릅니다. 요청이 두 번째 애플리케이션으로 전달되면 요청 속성을 통해 수신 된 데이터로 새로운 세션을 생성 할 수 있습니다.
보안상의 이유로 서블릿 컨테이너는 일반적으로 이러한 교차 컨텍스트 작업을 금지합니다.따라서 기본 동작을 변경해야합니다. 예를 들어, 톰캣 6 당신은 crossContext 아래와 같이 TOMCAT_HOME/conf의/context.xml에 파일 <Context>
요소에 대해 "true"로 속성을 설정해야합니다
<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
그러나의 ServletContext는 현재 웹 애플리케이션 컨텍스트를 THW됩니다 – devv