2010-04-15 2 views
0

웹 응용 프로그램이 실행되기 전에 Tomcat의 처리 피플 라인에 삽입되는 모듈/필터를 쓸 수 있습니까?Tomcat에서 웹 응용 프로그램을 실행하기 전에 시작되는 모듈/필터를 작성할 수 있습니까?

바람둥이가 처리하는 각 웹 응용 프로그램에 대해 켜거나 끌 수있는 것이 있습니다.

이 가능합니까?

기본적으로 요청 동작을 변경하거나 요청을 수행/수정할 수있는 웹 파이프 라인에 연결하는 재사용 가능한 필터입니다. 한 가지 예는 모든 IP를 기록하거나 URL을 기반으로 리디렉션하고 요청을 차단하는 것입니다.

+1

질문이 약간 있습니다. 먼저 'ServletContextListener'가 정답 인 webapp의 시작을 후킹 할 것을 요청할 것입니다. 그러나 그 이후에 당신은 정상적인'Filter'를 사용할 요청을 필터링하는 것에 대해 이야기하고 있습니다. 정확히 무엇을 원하니? – BalusC

답변

0

web.xml에서 ServletContextListener를 고려한 적이 있습니까?

+0

특정 웹 응용 프로그램 외부에서 호스팅 될 수 있습니까? 즉, 리스너 .jar가 웹 응용 프로그램의 범위 밖에 저장되므로 다른 웹 응용 프로그램에서도 사용할 수 있습니다. – Blankman

+0

정상적인 웹 앱 클래스 로더를 통해 발견되므로 질문은 본질적으로 배포 문제입니다. 개인적으로 나는 워해머의 자기 모습이 마음에 든다. WAR에 대한 전역 구성 파일을 원할 경우 EAR 배포 또는 웹 컨테이너 자체의 등록 정보 파일을 고려하십시오. –

1

Servlet 3.0을 사용하고 있다면 가능합니다. 당신이하는 일은 ServletContextListener 또는 ServletContainerInitializer 중 하나를 구현하는 것입니다. 아래의 코드는 ServletContextListener

@WebListener("auto config listeners") 
public class MyListenerConfigurator implements ServletContextListener { 
    public void contextInitialized(ServletContextEvent scEvt) { 
     ServletContext ctx = scEvt.getServletContext(); 
     FilterRegistration.Dynamic reg = ctx.addFilter("myFilter", "my.listener.class.MyListener"); 
     ... 
    } 

참조 EE6의 문서 here로 보여줍니다. 아마도 단점은 추가 할 수 있지만 제거 할 수 없다는 것입니다. 그리고 응용 프로그램이 시작될 때만 가능합니다.

참고 : 코드가 테스트되지 않았습니다.

관련 문제