目录
1. 入门
1.1 编写实体类
1.2 编写过滤器
1.3 编写Controller
1.4 在启动类上开启servlet组件扫描(@ServletComponentScan)
1.5 测试并观察控制台打印情况
2. 进阶
2.1 过滤器简单介绍
2.2 编写过滤器类
2.3?编写过滤器配置类
2.4?Controller和实体类和之前一样,启动类的servlet组件扫描可去除
2.5?启动程序并观察控制台
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 {@Overrideprotected 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);}
// 将请求传递给链中的下一个过滤器或目标Servletchain.doFilter(request,response);}
}
1.3 编写Controller
@RestController
@RequestMapping("/message")
public class MessageController {@Resourceprivate 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 {@Overrideprotected 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 {@Overrideprotected 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 {@Beanpublic FilterRegistrationBean getFilter1Registration() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(this.getMessageFilter1());//设置过滤器名称和路径,在过滤器类写了的话,这里不用重复写filterRegistrationBean.setName("filter");filterRegistrationBean.addUrlPatterns("/*");//设置过滤器执行顺序,数字越小,越早进行过滤,也可设置为负数filterRegistrationBean.setOrder(1);return filterRegistrationBean;}@Beanpublic FilterRegistrationBean getFilter2Registration() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(this.getMessageFilter2());//设置过滤器执行顺序filterRegistrationBean.setOrder(2);return filterRegistrationBean;}@Beanpublic MessageFilter1 getMessageFilter1() {return new MessageFilter1();}@Beanpublic MessageFilter2 getMessageFilter2() {return new MessageFilter2();}
}
2.4Controller和实体类和之前一样,启动类的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先启用,执行成功。