Filter过滤器
第一节 过滤器简介
1、通过类比了解过滤器作用
①坐地铁
②登录检查
2、过滤器的三要素
①拦截
过滤器之所以能够对请求进行预处理,关键是对请求进行拦截,把请求拦截下来才能够做后续的操作。而且对于一个具体的过滤器,它必须明确它要拦截的请求,而不是所有请求都拦截。
②过滤
根据业务功能实际的需求,看看在把请求拦截到之后,需要做什么检查或什么操作,写对应的代码即可。
③放行
过滤器完成自己的任务或者是检测到当前请求符合过滤规则,那么可以将请求放行。所谓放行,就是让请求继续去访问它原本要访问的资源。
提示:将来学习SpringMVC时,会学习SpringMVC中的『拦截器』,同样具备三要素。
第二节 HelloWorld
1、思路
2、操作步骤
可看上一篇的Thymeleaf的基本用法。
①准备工作
- 创建module
- 加入Thymeleaf环境
- 完成首页访问功能
- 创建Target01Servlet以及target01.html
- 创建SpecialServlet以及special.html
②创建Filter
[1]创建Target01Filter类
- 要点1:实现javax.servlet.Filter接口
- 要点2:在doFilter()方法中执行过滤
- 要点3:如果满足过滤条件使用 chain.doFilter(request, response);放行
- 要点4:如果不满足过滤条件转发或重定向请求
- 附带问题:Thymeleaf模板渲染。这里我们选择的解决办法是跳转到一个Servlet,由Servlet负责执行模板渲染返回页面。
public class Target01Filter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 1.打印一句话表明Filter执行了
System.out.println("过滤器执行:Target01Filter");
// 2.检查是否满足过滤条件
// 设定一个过滤条件:请求参数message是否等于monster
// 等于:放行
// 不等于:将请求跳转到另外一个页面
// ①获取请求参数
String message = request.getParameter("message");
// ②检查请求参数是否等于monster
if ("monster".equals(message)) {
// ③执行放行
// FilterChain对象代表过滤器链
// chain.doFilter(request, response)方法效果:将请求放行到下一个Filter,
// 如果当前Filter已经是最后一个Filter了,那么就将请求放行到原本要访问的目标资源
chain.