먼저 웹서버의 필터 위치를 살펴보세요. 필터는 이전 처리가 완료된 후 처리를 위해 다음 필터로 전달되는 체인입니다.
public interface Filter { //初始化方法,整个生命周期中只执行一次。 //在init方法成功(失败如抛异常等)执行完前,不能提供过滤服务。 //参数FilterConfig用于获取初始化参数 public void init(FilterConfig filterConfig) throws ServletException; //执行过滤任务的方法,参数FilterChain表示过滤器链,doFilter方法中只有执行chain.doFilter()后才能调用下一个过滤器的doFilter方法 //才能将请求交经下一个Filter或Servlet执行 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; //销毁方法,当移出服务时由web容器调用。整个生命周期中destroy方法只会执行一次 //destroy方法可用于释放持有的资源,如内存、文件句柄等 public void destroy(); }
필터의 입력 매개변수는 요청과 응답입니다. 필터는 일반적으로 일부 확인, 확인 및 기타 작업과 같은 일부 전처리 작업을 수행하는 데 사용됩니다. F1.2 Custom Filter
public class LoginFilter implements Filter { @Override public void destroy() { System.out.println("filter destroy method"); } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain filterChain) throws IOException, ServletException { System.out.println("filter doFilter method "); // 继续传递下去 filterChain.doFilter(arg0,arg1); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("filter init method"); } }
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean indexFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(new LoginFilter()); registration.addUrlPatterns("/"); return registration; } }E
2.2.1은 Filter@Webfilterrrrrrrrrrrrr
@WebFilter(urlPatterns = "/",filterName = "filter1") @Order(1) public class LoginFilter implements Filter { @Override public void destroy() { System.out.println("filter destroy method"); } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain filterChain) throws IOException, ServletException { System.out.println("filter doFilter method 1 "); filterChain.doFilter(arg0,arg1); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("filter init method"); } }e
2.2.2.2 추가 @ 주석 ServletComponentScan을 시작 클래스로
@SpringBootApplication @ServletComponentScan public class FilterTestApplication { public static void main(String[] args) { SpringApplication.run(FilterTestApplication.class, args); } }참고: @ServletComponentScan은 @WebFilter를 사용하여 모든 클래스를 스캔하고 이를 서블릿으로 등록합니다. 시작 클래스에서 이 주석을 추가하지 않으면 필터에 구성 요소 주석을 추가하여 필터로 등록할 수도 있습니다.order 주석으로 필터 순서를 조정할 수 있습니다.2.3 servletContext를 통해 등록
@Autowired ServletContext servletContext; servletContext.addFilter()
ApplicationContext는 ServletContext의 구현 클래스입니다. 해당 등록 메소드가 있음을 알 수 있습니다.
프로그램에서 ServletContext 가져오기3.1.1 자동 주입 사용
@Autowired private ServletContext servletContext;3.1.2 요청 get servletContext
ServletContext servletContext = request.getServletContext();3.1.3 Implement ServletContextListener
@Component public class TestListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println(sce); } }3.2 ServletRegistrationBeanFilter의 정의를 보면 웹필터 주석 내용과 동일함을 알 수 있습니다
public class ServletRegistrationBean<T extends Servlet> extends DynamicRegistrationBean<ServletRegistration.Dynamic> { private static final String[] DEFAULT_MAPPINGS = new String[]{"/*"}; private T servlet; private Set<String> urlMappings; private boolean alwaysMapUrl; private int loadOnStartup; private MultipartConfigElement multipartConfig; ...... }
위 내용은 Springboot에서 필터의 원리와 등록방법은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!