JavaWeb——登录(10/16):登录校验-Filter-详解(执行流程-拦截路径、过滤器的拦截路径配置、过滤器的测试与验证)

目录

登录校验 - 过滤器(Filter)详解(执行流程 & 拦截路径)

1. 过滤器的执行流程

1.1 过滤器的完整执行流程

1.2 过滤器执行过程中的关键点

2. 过滤器的拦截路径配置

2.1 拦截所有请求

2.2 拦截特定路径

2.3 拦截特定前缀路径

2.4 示例:拦截所有以 /emps/ 开头的请求

2.5 拦截多个路径

3. 过滤器的测试与验证

3.1 启动项目,观察拦截效果

4. 结论


登录校验 - 过滤器(Filter)详解(执行流程 & 拦截路径)

1. 过滤器的执行流程

过滤器(Filter)在 Web 应用中用于拦截请求,并在请求处理前后执行特定逻辑。其执行流程如下:

1.1 过滤器的完整执行流程

  1. 请求到达过滤器,执行 放行前逻辑(如身份校验、日志记录)。
  2. 调用 chain.doFilter() 放行请求,使其继续访问目标资源(如 Controller)。
  3. 目标资源执行完毕后,响应返回到过滤器
  4. 执行放行后的逻辑(如日志记录、数据修改)。
  5. 最终返回响应给客户端
@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("/*")
  • 拦截所有请求,包括 logindeptemps 等。

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 启动项目,观察拦截效果

  1. 拦截路径设置为/login

  2. 访问 /login,如果拦截路径是 /login,则会被拦截。

  3. 访问 /dept,如果未在拦截路径中,则不会被拦截。

4. 结论

  • 过滤器可用于统一拦截请求,在请求前后执行相应逻辑。
  • 执行流程包括放行前逻辑、目标资源访问、放行后逻辑。
  • 拦截路径可以灵活配置,支持拦截所有请求、特定路径、特定前缀路径。
  • 后续可优化:结合 JWT 实现身份认证过滤,拦截未登录用户的请求。

END 


学习自:黑马程序员——JavaWeb课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值