Tomcat 的 Valve 机制?

发布于

一、定义

Valve(阀门)是 Tomcat 的拦截器机制,类似 Servlet Filter,但作用在容器层面(Engine/Host/Context)。

二、常用 Valve

  • AccessLogValve:访问日志。
  • RemoteAddrValve:IP 黑白名单。
  • RemoteHostValve:主机名黑白名单。
  • SingleSignOnValve:单点登录。
  • CorsFilter 实际是 Filter 不是 Valve。

三、配置示例

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs" prefix="access" suffix=".log"
       pattern="%h %l %u %t &quot;%r&quot; %s %b"/>

四、与 Filter 区别

  • Valve 是 Tomcat 特有,容器级。
  • Filter 是 Servlet 规范,应用级。
  • Valve 可以做 Filter 做不到的事,如修改 Request 对象本身。