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
    
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中,可以使用过滤器(Filter)或拦截器(Interceptor)来进行敏感词及特殊字符的过滤处理。以下是两种方式的简单介绍: 1. 过滤器(Filter):可以使用javax.servlet.Filter接口来实现自定义过滤器,具体实现步骤如下: - 创建一个实现javax.servlet.Filter接口的类; - 在类上添加@WebFilter注解,指定过滤器要拦截的URL地址; - 在doFilter方法中对请求参数进行敏感词及特殊字符的过滤处理。 示例代码如下: ```java @Component @WebFilter(urlPatterns = "/*") public class SensitiveWordFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String param = req.getParameter("param"); if (StringUtils.isNotBlank(param)) { // 进行敏感词及特殊字符的过滤处理 } chain.doFilter(request, response); } } ``` 2. 拦截器(Interceptor):可以使用Spring MVC提供的HandlerInterceptor接口来实现自定义拦截器,具体实现步骤如下: - 创建一个实现HandlerInterceptor接口的类; - 在类上添加@Component注解,使其成为Spring Bean; - 在实现类中重写preHandle方法,在该方法中对请求参数进行敏感词及特殊字符的过滤处理。 示例代码如下: ```java @Component public class SensitiveWordInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String param = request.getParameter("param"); if (StringUtils.isNotBlank(param)) { // 进行敏感词及特殊字符的过滤处理 } return true; } } ``` 以上两种方式都可以实现敏感词及特殊字符的过滤处理,但是过滤器(Filter)可以拦截所有请求,而拦截器(Interceptor)只能拦截Spring MVC中的请求。具体使用哪种方式,可以根据实际情况进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值