봄 부팅 진입 도로 (4) --- 필터, 리스너,의 HandlerInterceptor 사용

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/Geffin/article/details/99709970

위, 우리는 필터 (필터)와 수신기 (수신기)와 유사한 서블릿, 믿지 않는를 사용하여, 사실, 서블릿의 사용을 도입? 설명 내 말 잘 들어.

필터 (필터) 구현

@WebFilter(filterName="myFirstFilter",urlPatterns="/*")
public class myFirstFilter implements Filter {
	
	@Override
    public void init(FilterConfig config){
        System.out.println("init()");
    }
	
	@Override
    public void destroy() {
        System.out.println("destroy()");
    }

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		System.out.println("doFilter()");
		arg2.doFilter(arg0, arg1);
	}

}

속성은 선택 FILTERNAME이고 인터페이스 javax.servlet.Filter 필터를 구현하는 클래스의 정의 @WebFilter는 필터의 이름을 선언하고, 특성 필수 urlPatterns에서, URL 필터링 패턴을 지정할 것이다.

물론, 그 댓글을 @ServletComponentScan TestApplication.java에 추가해야합니다 :

@ServletComponentScan
@SpringBootApplication
public class TestApplication {

	public static void main(String[] args) {
		SpringApplication.run(TestApplication.class, args);
	}

}

페이지를 열 무료, 관찰 할 수있는
여기에 그림 삽입 설명
필터 역할을했다.

이 리스너 (리스너) 구현

어떤 예를 들어 예제 ServletContextListener를 타고, 위, 청취자와 동일 TestApplication.java

@WebListener
public class MyFirstListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContex begin()");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContex destroy()");
    }

}

청취자 등록 @WebListener 나타낸다. 우리는 직접 TestApplication.java, 관찰 할 수 실행
여기에 그림 삽입 설명
역할을 우리의 청취자를 증명한다.

인터셉터 (3) (의 HandlerInterceptor) 구현

자바 웹 프로젝트에서 웹 요청을 필터링하는 필터를 사용하는 것 외에도, 우리는 또한 인터셉터를 사용할 수 있습니다. 둘 사이의 차이들은 인터셉터는 스프링에 의해 제공되는 동안 필터 서블릿 API는 점이다.

사실, 요격 기능과 필터는 매우 다르지 않다, 그러나 그것의 제어 능력. 우리는 콘텐츠를 요청 인터셉터를 수정할 수 없습니다, 그러나 우리는 요청의 실행을 일시 중단 할 수 있습니다.

인터셉터는 세 단계를 필요로 구현 :

  1. 클래스 만들기 인터셉터 인터페이스의 HandlerInterceptor를 구현
  2. 인터페이스 WebMvcConfigurer를 구현하는 클래스를 생성
  3. 맞춤 인터셉터의 예는 다음 체인 블록에 객체를 추가

다음 시뮬레이션 우리 코드

//拦截器1
public class MyFirstInterceptor implements HandlerInterceptor{

	// 只有返回true才会继续向下执行,返回false取消当前请求
	@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("在请求处理之前进行调用 MyFirstInterceptor");

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("请求处理之后,视图被渲染之前进行调用 MyFirstInterceptor");
    }

    //主要是用于进行资源清理工作
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("请求结束之后,渲染视图之后进行调用 MyFirstInterceptor");
    }
}

//拦截器2
public class MySecondInterceptor implements HandlerInterceptor{

	// 只有返回true才会继续向下执行,返回false取消当前请求
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
          throws Exception {
      System.out.println("在请求处理之前进行调用 MySecondInterceptor");

      return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
          ModelAndView modelAndView) throws Exception {
      System.out.println("请求处理之后,视图被渲染之前进行调用 MySecondInterceptor");
	}

	//主要是用于进行资源清理工作
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
          throws Exception {
      System.out.println("请求结束之后,渲染视图之后进行调用 MySecondInterceptor");
	}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //多个拦截器组成一个拦截器链,addPathPatterns 用于添加拦截规则,excludePathPatterns 用于排除拦截
        registry.addInterceptor(new MyFirstInterceptor()).addPathPatterns("/**");
        registry.addInterceptor(new MySecondInterceptor()).addPathPatterns("/**");
    }
}

브라우저에서 http를 입력 : // localhost를 : 8080 / 안녕하세요, 콘솔 출력은 다음과 같습니다 :
여기에 그림 삽입 설명
인터셉터 및 필터는 차이가 있습니다, 오직 요청의 DispatcherServlet 후 서블릿 요청 정의는에서, 인터셉터 체인을 취할 것 그것은 차단되지 않습니다. 그리고 한 필터링 규칙은 서블릿 필터와 같은 필터는 올 사람이다.

참조 : 봄 부팅 필터, 청취자
봄 부팅 인터셉터

추천

출처blog.csdn.net/Geffin/article/details/99709970