14.1 使用 Filter
1.创建过滤器类,继承 Filter 接口
2. 配置过滤器类,让框架能识别
项目结构如下:
14.1.1 创建过滤器类
package com.zhanglei.web;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行了MyFilter,doFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
}
14.1.2 配置过滤器
运用 FilterRegistrationBean 类得到过滤器,FilterRegistrationBean 类:
因此可以用 setFilter() 方法获取一个过滤器对象。那么如何设置 过滤的 url 呢,点进这个类的父类,找到方法:
因此可以配置 过滤器:
package com.zhanglei.config;
import com.zhanglei.web.MyFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfig {
@Bean
public FilterRegistrationBean getFilter(){
FilterRegistrationBean bean= new FilterRegistrationBean();
bean.setFilter(new MyFilter());
bean.addUrlPatterns("/zhanglei/*");
return bean;
}
}
由于过滤器不是 框架 中的对象,不在容器中,因此要加 @bean 注解,将过滤器对象放到容器中
而 拦截器是 框架中的,本身就在容器中,因此不需要 @Bean
14.1.3 通过控制器验证 Filter
controller类:
package com.zhanglei.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyController {
@RequestMapping("/zhanglei/login")
@ResponseBody
public String controller1(){
return "/zhanglei/login";
}
@RequestMapping("/lutingting/login")
@ResponseBody
public String controller2(){
return "/lutingting/login";
}
}
启动应用,在浏览器输入:localhost:8080/zhanglei/login,结果如下
由于该 url 经过了过滤器,因此控制台会有输出:
我们在配置中,配置了过滤的 url 是:/zhanglei/*,因此当url 为/lutingting/login 时,不会经过过滤器。