You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Servlet间请求转发是否会经过Tomcat定义的Valve及认证Valve识别规则

问题解答

1. Servlet转发请求是否会经过Authenticator Valve

默认情况下不会触发,原因如下:

  • Tomcat的Valve是绑定在容器(Engine/Host/Context)的管道(Pipeline)中执行的,仅当客户端发起的外部请求首次进入对应容器时,才会执行完整的管道链,包括身份认证类Valve。
  • Servlet内部转发(即调用request.getRequestDispatcher().forward()的场景)属于同一请求在当前上下文内部的资源跳转,不会重新触发Context层级的管道执行逻辑,因此你定义的Authenticator Valve不会被调用。
  • 例外情况:如果你的Valve配置在(单Servlet层级),或者是用客户端重定向sendRedirect跳转(本质是发起新的外部请求),才会重新走Valve执行逻辑。

2. Tomcat识别身份认证Valve的逻辑

Tomcat通过接口实现判定身份认证Valve:

  • 所有身份认证类Valve都要求实现org.apache.catalina.Authenticator接口,你自定义的Authenticator Valve只要实现该接口,Context容器启动时扫描管道下的Valve列表,就会自动把实现了该接口的实例识别为认证器,赋值给Context的authenticator属性,请求处理需要做身份校验时就会调用对应逻辑。
  • 如果你在web.xml或Context配置的<login-config>标签中指定了认证方式,Tomcat也会自动匹配对应内置的Authenticator实现,比如BASIC认证对应BasicAuthenticator、FORM认证对应FormAuthenticator。

内容的提问来源于stack exchange,提问作者Vishwa A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 21:06:07