에 등록한다면
<!-- 우리가 만든 필터 등록 -->
<filter>
<filter-name>abcFilter</filter-name>
<filter-class>com.kh.app19.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>abcFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
@WebFilter(urlPatterns = "/*")
@Component(value = "Filterzzzz")
public class MyFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("filter~!~~~!");
chain.doFilter(request, response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
<!-- 우리/스프링이 만든 필터 등록 -->
<filter>
<filter-name>abc</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>abc</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<bean id="abc" class="com.kh.app19.filter.MyFilter">
</bean>
FILTER
1) 디스패처 서블릿 <-> 컨트롤러
에서의 요청을 가로챈다.
2) 화면을 만들고 나서 ?????
디스패처 서블릿 <- 뷰리졸버
에서의 요청을 가로챈다.뷰 -> html 로 response
에서의 요청을 가로챈다.디스패처 서블릿 -> 컨트롤러
에서의 404에러를 처리하지 못한다.클라이언트 -> 스프링 컨테이너 로 request
에서
/*
인터셉터 만드는 방법 2가지
1. HandlerInterceptor 인터페이스 구현하기
2. HandlerInterceptorAdapter 클래스 상속받기
*/
public class MyInterceptor extends HandlerInterceptorAdapter{
//인터셉터는 3가지 시점에 관여를 한다.
//3가지 메소드 ()
//1) preHandle
//1. handle (컨트롤러 가기) 전에
//리턴값에 따라 요청 통과시킬지 말지 결정 가능
//핸들러 : 처리할 메소드 정보 확인 가능
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle called ...");
System.out.println("handler : "+handler);
//HomeController의 home(Locale, Model)가 호출됨
return true;
}
//2. handle 끝나고
//리턴값이 없음 -> 우리가 커트할 수 없음
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle called~~");
super.postHandle(request, response, handler, modelAndView);
}
//3. 화면 넘겨주기 전에
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion called!!!!!!!!!!!!");
System.out.println("ex: "+ ex);
super.afterCompletion(request, response, handler, ex);
}
}
<interceptors>
<interceptor>
<mapping path="/**"/>
<!-- 특정 경로만 인터셉트 안함 -->
<exclude-mapping path="/test"/>
<beans:bean class="com.kh.app19.interceptor.MyInterceptor"/>
</interceptor>
</interceptors>
@RequestMapping("test")
@ResponseBody
public String test() {
return "test";
}