2016-10-27 2 views
0

Tomcat 8의 루트 컨텍스트 (/)에 배포 된 WAR 파일이 있는데이 파일에는 서블릿 필터가 연결되어 있습니다. 필터는 사용자가 로그인했는지 여부를 확인하고 로그인 페이지로 리디렉션하지 않는지 확인합니다. 같은 문맥에 배치 된 다른 문맥도 /app1/app2입니다. 루트 컨텍스트의 필터를 다른 컨텍스트에도 적용하여 3 개의 거의 동일한 필터 (각 컨텍스트에 하나씩)를 유지할 필요가 없습니다.루트 컨텍스트에서 서블릿 필터가 다른 컨텍스트에서 작동하도록 허용하려면 어떻게합니까?

다른 컨텍스트에 속하는 URL이 루트 컨텍스트의 필터에서 처리되지 않는 것이 문제입니다. 예를 들어 URI /foo/bar은 필터에 의해 포착되지만 (다른 컨텍스트 중 하나에 해당하지 않으므로) /app1/foo/bar은 포착되지 않습니다.

내가 web.xml 파일에서 필터 매핑 수정하여 모든 것을 잡으려고 필터를 구성 시도했다 :

<filter-mapping> 
    <filter-name>MyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

을 내가 명시 적으로 각 상황에 맞는 추가 시도했다 :

<filter-mapping> 
    <filter-name>MyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <url-pattern>/app1/*</url-pattern> 
    <url-pattern>/app2/*</url-pattern> 
</filter-mapping> 

하지만 두 방법 모두 효과가 없습니다. 보안 문제라고 가정합니다. 다른 문맥에서는 명시 적으로 루트 필터를 허용해야합니다. 어떻게 작동 시키나요?

답변

1

이 기능을 사용할 수 없습니다. 웹 응용 프로그램은 독립적입니다. 요청은 필터 또는 서블릿이 매핑되기 전에 웹 응용 프로그램에 매핑됩니다.

여러 개의 필터 정의가 필요 없다고 가정 할 때 Tomcat 밸브로 필터를 다시 구현하고 호스트에서 밸브를 구성하는 것이 가장 좋습니다.

+0

[Apache Tomcat 8 Configuration Reference] (https://tomcat.apache.org/tomcat-8.0-doc/config/context.html)에서 설명한대로 교차 컨텍스트 호출을 활성화 한 다음 [ javax.servlet.ServletContext.getRequestDisptacher (...)] (http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html#getRequestDispatcher-java.lang.String-) app1' 또는'app2'. 그것은 지저분 할 수 있지만 루트 응용 프로그램과 다른 응용 프로그램 간의 직접 연결을 만듭니다. –

관련 문제