이 글은 springboot의 필터와 인터셉터의 구현 방법(코드)을 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.
필터와 인터셉터는 모두 AOP 프로그래밍 아이디어의 표현이며 권한 확인, 로깅 등과 같은 작업을 구현할 수 있습니다. 둘 사이에는 일정한 유사점이 있지만 차이점은 다음과 같습니다.
Filter는 서블릿 사양이며 웹 프로그램에서만 사용할 수 있는 반면 인터셉터는 Spring 사양입니다. 웹 프로그램이나 응용 프로그램에서 사용할 수 있습니다.
Filter는 서블릿에 정의되며 서블릿 컨테이너에 따라 다릅니다. 인터셉터는 Spring에 정의되어 있으며 Spring 컨테이너에 따라 다릅니다.
인셉터는 Spring 컴포넌트로, Spring에서 관리되고 Spring 구성 파일에 구성되므로 Spring 리소스를 모두 사용할 수 있습니다. 예를 들어 서비스, 데이터 소스 등은 IOC 컨테이너를 통해 인터셉터에 주입될 수 있지만 필터는 주입될 수 없습니다.
필터는 서블릿 전후에만 작동하는 반면, 인터셉터는 메서드 전후, 예외가 발생하기 전후에 깊이 들어갈 수 있습니다. 더 깊이를 사용하세요.
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() { } }
Spring에서 인터셉터 구현
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!