Tomcat阀

来源:互联网 发布:移动网络代维管理平台 编辑:程序博客网 时间:2024/05/16 02:13

Tomcat组件阀(Valve)用于对Catalina容器接收到的HTTP请求进行预处理。过滤器是在JavaServlet规范中个提出来的,因此适用于所有的Servlet容器,而Tomcat阀是Tomcat专有的,不能用于Tomcat以外的其他Servlet容器。

Tomcat阀简介

Tomcat阀在不同的容器中的作用范围如下:

Tomcat阀加入到Catalina容器中

容器

描述

Engine

加入到Engine中的Tomcat阀可以预处理该Engine接收到的所有HTTP请求

Host

加入到Host中的Tomcat阀可以预处理该Engine接收到的所有Host请求

Context

加入到Context中的Tomcat阀可以预处理该Context接收到的所有HTTP请求

所有Tomcat阀都实现了or.apache.Catalina.Valve接口或扩展了org.apache.Catalina.valves.ValveBase类。Tomcat阀主要包括以下几种:

客户访问日志阀(Access LogValve)

远程地址过滤阀(RemoteAddress Filter)

远程主机过滤阀(Remote HostFilter)

客户请求记录阀(RequestDumper)

Tomcat阀用<Valve>元素来过滤,它的形式为:

<ValveclassName=”实现这种阀的类的完整名字” … 其他属性…/>

如果要把Tomcat阀加入到Engine或Host中,则需要在Tomcat的conf/server.xml文件的相应<Engine>或<Host>元素中加入<Valve>元素;如果要把Tomcat阀加入到Conetxt,则需要在Tomcat的conf/server.xml文件的相应<Context>元素中加入<Value>元素,或者在响应Web应用的META-INF/context.xml文件中的<Context>元素中加入<Valve>元素。

客户访问日志阀

客户访问日志阀(Access LogValve)能够将客户的请求信息写到日志文件中,这些日志可以记录网页的访问次数、访问时间、用户的会话活动和用户的安全验证信息等。客户访问日志阀可以加入到Engine、Host或Context容器中,以记录所在容器接收的HTTP请求信息。

客户访问日志阀的<Valve>元素的属性

属性

描述

className

指定阀的实现类,这里为org.apache.catalina.valves.AccessLogValve

directory

设定存放日志文件的绝对或相对于<CATALINA_HOME>的目录,该属性的默认值为<CATALINA_HOME>/logs

pattern

设定日志的格式和内容

prefix

设定日志文件名前缀,默认值为access_log

resolveHosts

如果设为true,表示把远程IP地址解析为主机名,如果设为false,表示直接记录远程IP地址,默认值为false

suffix

设定日志文件的扩展名,默认值为””

<Valve>元素的pattern属性用于设定日志的格式和内容,它有以下可选值

%a:远程IP地址。

%A:本地IP地址。

%b:发送的字节数,不包括HTTP头部。符号”-”表示发送字节为零。

%B:发送的字节数,不包括HTTP头部。

%h:远程主机名。

%H:客户请求所使用的协议。

%l:远程逻辑用户名。

%m:客户请求方式。

%p:接收到客户请求的本地服务器端口。

%q:客户请求中的查询字符串,即HTTP请求的第一行的URI部门的”?”后面的内容。

%r:客户请求的第一行内容(包括请求方式、请求URI及HTTP协议版本)。

%s:服务器响应结果中的HTTP状态码。

%S:用户的SessionID。

%t:时间和日期。

%u:通过安全验证的远程用户名,符号”-”表示不存在远程用户名。

%U:客户请求的URL路径。

%v:本地服务器名。

远程地址过滤器

远程地址过滤器(RemoteAddress Filter)可以根据远程客户的IP地址来决定是否接受客户的请求。在远程地址过滤器中,实现保存了一份被拒绝的IP地址清单和允许访问的IP地址清单。如果客户的IP地址在拒绝清单中,那么这个客户的请求不会被Catalina容器响应;如果客户的IP地址在允许访问清单中,那么这个客户的请求可以被Catalina容器响应。

远程地址过滤器的<Valve>元素的属性

属性

描述

className

指定阀的实现类,这里为org.apache.catalina.valves.RemoteAddrValve

allow

指定允许访问的客户IP地址,如果此项没有设定,表示只要客户IP地址不再deny清单中,就允许访问,多个IP地址可以以逗号隔开

deny

指定不允许访问的客户IP地址,多个IP地址以逗号隔开

若一个IP地址同时出现在allow清单和deny清单中,则deny有效。

远程主机过滤器

远程主机过滤器可以根据远程客户的主机名,来决定是否接受客户的请求。

客户请求记录器

客户请求记录器用于把客户请求的详细信息记录到日志文件中。客户请求记录器是一个有效的跟踪工具,尤其是当HTTP请求中的Header或Cookie有错误时,它可以跟踪客户请求的详细信息。
0 0