Spring boot拦截器、过滤器、设置字符编码

Spring boot拦截器、过滤器、设置字符编码

拦截器

  • 自定义一个拦截器实现HandlerInterceptor接口
    spring 5以后的版本,要求Java版本最少是8的,会有一个新特性default默认方法,可以不全部覆盖

  • 写一个配置类 要加上@Configuration注解 ,然后实现WebMvcConfigurer
    就相当于一个spring的xml

    实现addInterceptors()方法

    @Configuration//相当于是一个applicationContext-mvc.xml
    public class WebConfig implements WebMvcConfigurer {
    	/**
         * 添加拦截器
         * 拦截器的注册类
         * @param registry
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //拦截器需要拦截的路径
            String[] pathPatterns = {
                    "/**"
            };
            //拦截器不需要拦截的路径
            String[] excludePathPatterns ={
                "/login",
                "/config"
            };
    		//LoginInterceptor() 自定义拦截器
            registry.addInterceptor(new LoginInterceptor()).addPathPatterns(pathPatterns).excludePathPatterns(excludePathPatterns);
        }
     }
    

过滤器

  • 方式一
    • 自定义一个filter类,实现Filter类,并在自定义的filter类上加上@WebFilter(filterName=“MyFilter”,urlPatterns="/*")注解

      //过滤路径
      @WebFilter(filterName = "MyFilter",urlPatterns = "/*")
      public class MyFilter implements Filter {
          @Override
          public void destroy() {
          }
      
          @Override
          public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
              System.out.println("my filter ....... ");
              chain.doFilter(req, resp);
          }
      
          @Override
          public void init(FilterConfig config) throws ServletException {
      
          }
      
      }
      
    • 在启动类上添加@ServletComponentScan(basePackages = {“com.diety.springboot.servlet”,“com.diety.springboot.filter”})扫描filter包
      在这里插入图片描述

  • 方式二
  • 自定义一个普通的filter类,实现Filter类
  • 编写一个配置类
    @Configuration//相当于是一个applicationContext-mvc.xml
    public class WebConfig implements WebMvcConfigurer{
    	/**
         *
         *注册自定义的过滤器的第二种方式
         * @return
         */
        @Bean
        public FilterRegistrationBean heFilterRegistrationBean(){
        	//CommoneFilter()自定义过滤器
            FilterRegistrationBean registration = new FilterRegistrationBean(new CommoneFilter());
            registration.addUrlPatterns("/*");
            return registration;
        }
    }
    

设置字符编码

  • 第一种
    @Configuration//相当于是一个applicationContext-mvc.xml
    public class WebConfig implements WebMvcConfigurer {
    	/**
        * 注册一个字符编码过滤器
         *spring 提供的
         * 注:只有当spring.http.encoding.enabled=false配置成false后,过滤器才起作用
         * @return
         */
        @Bean
        public FilterRegistrationBean filterRegistrationBean(){
    
            //创建一个spring提供的过滤器
            CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
            //强制编码
            characterEncodingFilter.setForceEncoding(true);
            characterEncodingFilter.setEncoding("UTF-8");
    
            //filter注册bean
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            registrationBean.setFilter(characterEncodingFilter);
            //要过滤的路径
            registrationBean.addUrlPatterns("/*");
            return registrationBean;
        }
     }
    
  • 第二种
    在application.properties中配置字符编码设置
    #springboot 1.4.2开始提供这种方式的项目编码
    spring.http.encoding.charset=utf-8
    spring.http.encoding.enabled=true
    spring.http.encoding.force=true
    
发布了9 篇原创文章 · 获赞 11 · 访问量 406

猜你喜欢

转载自blog.csdn.net/qq_41681399/article/details/105384366