创建 三个类
分别实现 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 { } }
@Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter{ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //addResourceHandler 对外暴露的路径 addResourceLocations 对内暴露路径 registry.addResourceHandler("/aaserts/**").addResourceLocations("classpath:/assets/"); } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/ws").setViewName("/ws"); registry.addViewController("/login").setViewName("/login"); registry.addViewController("/chat").setViewName("/chat"); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(demoInterceptor()); } @Bean public DemoInterceptor demoInterceptor() { return new DemoInterceptor(); } //自定义拦截器 public class DemoInterceptor extends HandlerInterceptorAdapter{ @Override //请求发生前执行 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } @Override // 请求发生后执行 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { super.postHandle(request, response, handler, modelAndView); } } }
拦截器