目录
1.4 在启动类上开启servlet组件扫描(@ServletComponentScan)
2.4?Controller和实体类和之前一样,启动类的servlet组件扫描可去除
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.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先启用,执行成功。