您好,欢迎来到刀刀网。
搜索
您的当前位置:首页SpringBoot中使用Filter(过滤器)

SpringBoot中使用Filter(过滤器)

来源:刀刀网
1. 入门
1.1 编写实体类
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Message {
    private Date date;
    private String msg ;
    private String title;
}
1.2 编写过滤器
@WebFilter(urlPatterns = "/message/*",filterName = "filter1")
public class MessageFilter1 extends HttpFilter {
    @Override
    protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
        if("/message/echo".equals(request.getRequestURI())) {
            String title = request.getParameter("title");
            System.out.println("【filter1】拦截到的请求的title参数内容为:"+title);
        }
//        将请求传递给链中的下一个过滤器或目标Servlet
        chain.doFilter(request,response);
    }
}
1.3 编写Controller
@RestController
@RequestMapping("/message")
public class MessageController {
    @Resource
    private Message message ;
    @RequestMapping("/echo")
    public Message echo(String msg,String title) {
        message.setTitle(title);
        message.setMsg(msg);
        return message;
    }

}
1.4 在启动类上开启servlet组件扫描(@ServletComponentScan)
@SpringBootApplication
@ServletComponentScan   //开启servlet组件扫描
public class MicrobootWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(MicrobootWebApplication.class, args);
    }

}
1.5 测试并观察控制台打印情况
http://localhost:8083/message/echo?msg=西红柿战争&title=两败俱伤

2. 进阶
2.1 过滤器简单介绍

过滤器(Filter)是Java Web应用中一种用于处理请求(request)和响应(response)的组件

过滤器和的执行顺序:

  • 过滤器(预处理)
  • 过滤器(后处理)
  • (前处理)
  • 控制器方法(Controller)
  • (后处理)
  • 过滤器(后处理)
2.2 编写过滤器类
//过滤器1,因为有了配置类,不再需要添加@WebFilter注解
public class MessageFilter1 extends HttpFilter {
    @Override
    protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
        if("/message/echo".equals(request.getRequestURI())) {
            String title = request.getParameter("title");
            System.out.println("【filter1】拦截到的请求的title参数内容为:"+title);
        }
        chain.doFilter(request,response);
    }
}
public class MessageFilter2 extends HttpFilter {
    @Override
    protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
        if("/message/echo".equals(request.getRequestURI())) {
            String msg = request.getParameter("msg");
            System.out.println("【filter2】拦截到的请求的title参数内容为:"+msg);
        }
        chain.doFilter(request,response);
    }
}
2.3 编写过滤器配置类
//过滤器配置类
@Configuration
public class WebFilterConfig {

    @Bean
    public FilterRegistrationBean getFilter1Registration() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(this.getMessageFilter1());
        //设置过滤器名称和路径,在过滤器类写了的话,这里不用重复写
        filterRegistrationBean.setName("filter");
        filterRegistrationBean.addUrlPatterns("/*");
        //设置过滤器执行顺序,数字越小,越早进行过滤,也可设置为负数
        filterRegistrationBean.setOrder(1);
        return filterRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean getFilter2Registration() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(this.getMessageFilter2());
        //设置过滤器执行顺序
        filterRegistrationBean.setOrder(2);
        return filterRegistrationBean;
    }

    @Bean
    public MessageFilter1 getMessageFilter1() {
        return new MessageFilter1();
    }

    @Bean
    public MessageFilter2 getMessageFilter2() {
        return new MessageFilter2();
    }
}
2.4 Controller和实体类和之前一样,启动类的servlet组件扫描可去除
//@ServletComponentScan   //开启servlet组件扫描
public class MicrobootWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(MicrobootWebApplication.class, args);
    }

}
2.5 启动程序并观察控制台
http://localhost:8083/message/echo?msg=西红柿战争&title=两败俱伤

filter1比filter2先启用,执行成功。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务