SpringBoot添加过滤器、拦截器学习笔记

SpringBoot添加过滤器、拦截器

添加过滤器有两种方式:

    1. 过滤器继承Filter并在类上面添加@WebFilter,启动类上面加上@ServletComponentScan;

    • @ServletComponentScan默认扫描全部注解,属性basePackages可以指定包。

    • @ServletComponentScan(basePackages = "com.huarui.springboot3_1.filter/**")
    • /*:这一层的所有,/**:所有层的所有;

    1. 配置类:但是同时需要使用第一种方式创建过滤器

       

      第二种方式不需要扫描注解即@ServletComponentScan,因为配置类已经自动注册进spring容器了,而第一种并没有直接注入spring中需要扫描注解才会生效
第一种方式过滤顺序是按照类的排序来的,而第二种方式则可以通过setOrder来设置顺序。
package com.huarui.springboot3_1.filter;
​
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
​
@Configuration
public class MyFilterConfig {
   // 这是springboot第二种注册过滤器的方式
   @Bean
   public FilterRegistrationBean setFilter1(){
       FilterRegistrationBean filter=new FilterRegistrationBean();
       filter.setFilter(new MyFilter());
       filter.setName("f1");
       filter.addUrlPatterns("/*");
       filter.setOrder(3);
       return filter;
  }
   @Bean
   public FilterRegistrationBean setFilter2(){
       FilterRegistrationBean filter=new FilterRegistrationBean();
       filter.setFilter(new MyFilter2());
       filter.setName("f2");
       filter.addUrlPatterns("/*");
       filter.setOrder(2);
       return filter;
  }
   @Bean
   public FilterRegistrationBean setFilter3(){
       FilterRegistrationBean filter=new FilterRegistrationBean();
       filter.setFilter(new MyFilter3());
       filter.setName("f3");
       filter.addUrlPatterns("/*");
       filter.setOrder(1);
       return filter;
  }
​
}

接口WebMvcConfigurer

静态资源放行:addResourceHandler()
// 静态资源放行
public void addResourceHandlers(ResourceHandlerRegistry registry) {
   //第一个方法中的参数是对外暴露的路径,对应着第二个方法中参数的内部路径
   registry.addResourceHandler("/myResources/**").addResourceLocations("classpath:/myResources/");
}
  • 将/myResources/下的请求从/myResources/内部路径中查找资源;

添加拦截器:addInterceptors()
   // 添加拦截器
   @Autowired
   private MyInterceptor2 my2;
​
   @Bean//把返回的对象注入spring
   public MyInterceptor3 getMy3(){
       return new MyInterceptor3();
  }
   @Autowired
   private MyInterceptor3 my3;  
​
// 拦截器在这里添加进去
   public void addInterceptors(InterceptorRegistry registry) {
       // 拦截器拦截所有的请求
//       registry.addInterceptor(new MyInterceptor1()); 多例
//       registry.addInterceptor(my2); 单例
       // 指定拦截 aa和bb 下面的所有请求 addPathPatterns()的参数是String... 可变参数
//       registry.addInterceptor(my2).addPathPatterns("/aa/**").addPathPatterns("/bb/**");
//       registry.addInterceptor(my2).addPathPatterns("/**","/**");
       // 不拦截以.html结尾的文件
       registry.addInterceptor(my2).addPathPatterns("/**","/**").excludePathPatterns("/**.html");
  }
视图跳转控制器:addViewControllers()
// 没有业务逻辑,只是跳转页面
@Override
public void addViewControllers(ViewControllerRegistry registry) {
   // 默认就是转发 请求:index,跳转到index.html页面
   registry.addViewController("index").setViewName("index.html");
   // 重定向的两种方式
   registry.addViewController("index2").setViewName("redirect:index.html");
   registry.addRedirectViewController("index3","index.html");
}
posted @ 2021-07-04 21:37  菜鸟g  阅读(672)  评论(0)    收藏  举报