2013-09-06 1 views
0

동일한 Java 엔터프라이즈 응용 프로그램 서버에서 실행중인 모든 응용 프로그램에서 HttpSession 객체를 사용할 수 있습니까? 단지 얻는다 -Java 웹 응용 프로그램 객체 디스 패칭

내 작품에 대한

, 내가 인증을 수행 한 후 다른 application.In 두 번째 응용 프로그램으로 전달됩니다 응용 프로그램에 로그인 한 필터는

가 ServletContext를 URL에 직접 액세스를 방지하기 위해 추가 현재 웹 응용 프로그램의 컨텍스트

이 시나리오를 처리하기위한 올바른 접근 방법은 무엇입니까?

답변

1

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> 
0

아니요 HttpSession 개체를 동일한 서버에있는 모든 응용 프로그램에서 사용할 수 없습니다. 확인하려면

2 개의 앱을 만들려면 하나의 앱에서 seesion.setAttribute ("hello", "hello")를 사용하십시오. 지금 당신은 경우 부분이 없음은 HttpSession 객체는 응용 프로그램간에 공유되지되지

0

실행됩니다 볼 수 두 번째 응용 프로그램을

if(session.getAttribute("hello")==null) 
{ 
//some codes to check 
} 
else 

{ 
//some codes to check 
} 

를 실행합니다. 컨테이너에서 여러 응용 프로그램간에 정보를 공유하는 표준 방법은 ServletContext를 사용하는 것입니다. ServletContext의 유일한 제한은 웹 애플리케이션이 여러 JVM 사이에 분산되어 있으면 컨텍스트 정보가 하나의 JVM 내에 있기 때문에 작동하지 않는다는 것입니다.

+0

그러나의 ServletContext는 현재 웹 애플리케이션 컨텍스트를 THW됩니다 – devv

관련 문제