创建 三个类
分别实现 Filter ServletContextListener HttpServlet
在springboot 启动类中@bean加入
2 ,实现 ServletContextIntializer接口
@SpringBootApplication public class DemoApplication implements ServletContextInitializer{ public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Override public void onStartup(ServletContext servletContext) throws ServletException { servletContext.addServlet("customServlet", new CustomServlet()).addMapping("/root"); servletContext.addFilter("customfilter", new CustomFilter()) .addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "customServlet"); servletContext.addListener(new CustomListener()); } }
3. 注解方式 主类加上@ServletComponentScan 给三个分别加上注解
@WebServlet(urlPatterns="/index", name="customServlet") public class CustomServlet extends HttpServlet{ .... } @WebListener public class CustomListener implements ServletContextListener{ .... } @WebFilter(urlPatterns="/*") public class CustomFilter implements Filter{ ... }
4. 自定义注解 实现 主类上加上此注解
@Target(value = {ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(value = {FirstFilterConfiguration.class}) public @interface EnableFirstFilter { }
注册配置的bean(
FirstFilterConfiguration.class
)
public class FirstFilterConfiguration { public static final Integer ORDER = Integer.MIN_VALUE; @Bean public FilterRegistrationBean firstFilter(){ FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new FirstFilter()); registration.addUrlPatterns("/*"); registration.setName("firstFilter"); registration.setOrder(ORDER); return registration; } }
public class FirstFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest srst, ServletResponse srsp, FilterChain chain) throws IOException, ServletException { chain.doFilter(srst, srsp); } @Override public void init(FilterConfig arg0) throws ServletException { } }