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

不言
풀어 주다: 2018-11-20 16:01:37
앞으로
3632명이 탐색했습니다.

이 글은 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으로 문의하세요.
최신 이슈
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!