目录
登录校验 - 过滤器(Filter)详解(执行流程 & 拦截路径)
登录校验 - 过滤器(Filter)详解(执行流程 & 拦截路径)
1. 过滤器的执行流程
过滤器(Filter)在 Web 应用中用于拦截请求,并在请求处理前后执行特定逻辑。其执行流程如下:
1.1 过滤器的完整执行流程
- 请求到达过滤器,执行 放行前逻辑(如身份校验、日志记录)。
- 调用
chain.doFilter()放行请求,使其继续访问目标资源(如 Controller)。 - 目标资源执行完毕后,响应返回到过滤器。
- 执行放行后的逻辑(如日志记录、数据修改)。
- 最终返回响应给客户端。
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {throws IOException, ServletException {
System.out.println("请求到达过滤器 - 执行放行前逻辑");
filterChain.doFilter(request, response); // 放行请求
System.out.println("请求处理完成 - 执行放行后逻辑");
}
说明:
- 放行前逻辑:在
filterChain.doFilter()之前执行(如权限校验、日志记录)。 - 放行后逻辑:在
filterChain.doFilter()之后执行(如修改响应数据、日志记录)。 - 请求在放行后,先执行目标资源(如 Controller 代码),然后回到过滤器执行剩余逻辑。
1.2 过滤器执行过程中的关键点
- 请求在进入目标资源前,过滤器可以执行前置逻辑(如用户身份校验)。
- 请求访问目标资源(如 Controller 方法)。
- 目标资源执行完毕后,回到过滤器执行后置逻辑(如日志记录、数据格式化)。
- 最终响应返回给客户端。
示例执行日志:
请求到达过滤器 - 执行放行前逻辑
请求放行 - 访问 Controller 逻辑
请求处理完成 - 执行放行后逻辑
2. 过滤器的拦截路径配置
默认情况下,过滤器可以拦截所有请求(/*),但我们可以自定义拦截特定路径。
2.1 拦截所有请求
@WebFilter("/*")
- 拦截所有请求,包括
login、dept、emps等。
2.2 拦截特定路径
@WebFilter("/login")
- 仅拦截
/login请求,其他请求不会被拦截。
2.3 拦截特定前缀路径
@WebFilter("/api/*")
- 仅拦截
/api/开头的请求,如/api/dept、/api/emps。
2.4 示例:拦截所有以 /emps/ 开头的请求
@WebFilter("/emps/*")
/emps/list会被拦截。/login不会被拦截。
2.5 拦截多个路径
可以使用数组定义多个拦截路径:
@WebFilter(urlPatterns = {"/login", "/emps/*", "/departments/*"})
- 该过滤器会拦截
/login、/emps/xxx、/dept/xxx请求。
3. 过滤器的测试与验证
3.1 启动项目,观察拦截效果
-
拦截路径设置为/login

-
访问
/login,如果拦截路径是/login,则会被拦截。
-
访问
/dept,如果未在拦截路径中,则不会被拦截。
4. 结论
- 过滤器可用于统一拦截请求,在请求前后执行相应逻辑。
- 执行流程包括放行前逻辑、目标资源访问、放行后逻辑。
- 拦截路径可以灵活配置,支持拦截所有请求、特定路径、特定前缀路径。
- 后续可优化:结合 JWT 实现身份认证过滤,拦截未登录用户的请求。
END
学习自:黑马程序员——JavaWeb课程

812

被折叠的 条评论
为什么被折叠?



