>  기사  >  Java  >  springboot의 필터 및 인터셉터 구현 방법 소개(코드)

springboot의 필터 및 인터셉터 구현 방법 소개(코드)

不言
不言앞으로
2018-11-20 16:01:373687검색

이 글은 springboot의 필터와 인터셉터의 구현 방법(코드)을 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

필터와 인터셉터는 모두 AOP 프로그래밍 아이디어의 표현이며 권한 확인, 로깅 등과 같은 작업을 구현할 수 있습니다. 둘 사이에는 일정한 유사점이 있지만 차이점은 다음과 같습니다.

  • Filter는 서블릿 사양이며 웹 프로그램에서만 사용할 수 있는 반면 인터셉터는 Spring 사양입니다. 웹 프로그램이나 응용 프로그램에서 사용할 수 있습니다.

  • Filter는 서블릿에 정의되며 서블릿 컨테이너에 따라 다릅니다. 인터셉터는 Spring에 정의되어 있으며 Spring 컨테이너에 따라 다릅니다.

  • 인셉터는 Spring 컴포넌트로, Spring에서 관리되고 Spring 구성 파일에 구성되므로 Spring 리소스를 모두 사용할 수 있습니다. 예를 들어 서비스, 데이터 소스 등은 IOC 컨테이너를 통해 인터셉터에 주입될 수 있지만 필터는 주입될 수 없습니다.

  • 필터는 서블릿 전후에만 작동하는 반면, 인터셉터는 메서드 전후, 예외가 발생하기 전후에 깊이 들어갈 수 있습니다. 더 깊이를 사용하세요.

Spring에서 필터 구현하기 #

public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("MyFilter init...");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //站点图标/favicon.ico  filter会执行2次
        HttpServletRequest request=(HttpServletRequest) servletRequest;
        System.out.println(request.getRequestURI());
        System.out.println("MyFilter dofilter...");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

springboot에 필터 등록하기

#🎜🎜 #

@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean registrationBean(){
        FilterRegistrationBean myfilter=new FilterRegistrationBean(new MyFilter());
        myfilter.addUrlPatterns("/*");

        return myfilter;
    }

여기로 이동 데모를 실행해 보면 do 필터가 두 번 실행되는 것을 볼 수 있는데, 디버그할 때 사이트 아이콘이 관리되기 때문이라는 것을 발견했습니다. 브라우저가 이를 요청하며 이는 uri를 통해 찾을 수 있습니다. 정규식을 사용하여 필요에 따라 적절하게 제어할 수 있습니다.

방법 2: 서블릿 주석 정의 Filter

@Component
@WebFilter(filterName = "myFilter2",urlPatterns = "/*")
public class MyFilter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("myFilter2 init...");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("myFilter2 dofilter ...");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

Servleta 주석을 사용하여 선언된 필터는 실행 중에 요청이 하나만 있습니다. 이는 스프링 구성 필터를 사용하는 것과 다릅니다.

Spring에서 인터셉터 구현

인터셉터는 주로 사용자 정의 클래스를 사용하여 HandlerInterceptor를 통합합니다. preHandle이 true를 반환하면 프로그램은 계속 실행되고 false를 반환하면 요청이 중단됩니다.

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("/preHandler");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) 
throws Exception {
        System.out.println("postHandler");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }
}

프로그램에서 인터셉터를 구성하고 차단 규칙을 선언합니다

#🎜 🎜 #
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/*");
    }
}

실행 결과

위 내용은 springboot의 필터 및 인터셉터 구현 방법 소개(코드)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제