Tomcat中定制阀门

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 我们说管道机制给我们带来了更好的扩展性,Tomcat中在扩展性方面具体如何体现,这便是本节讨论的内容。从上节了解到基础阀门是必须执行的,假如你需要一个额外的逻辑处理阀门,可以添加一个非基础阀门。

我们说管道机制给我们带来了更好的扩展性,Tomcat中在扩展性方面具体如何体现,这便是本节讨论的内容。从上节了解到基础阀门是必须执行的,假如你需要一个额外的逻辑处理阀门,可以添加一个非基础阀门。

我的需求是对每个请求访问进行IP记录,打印到日志里面,详细操作如下:

① 自定义一个阀门PrintIPValve,只要继承ValveBase并重写invoke方法即可,ValveBase是Tomcat抽象的一个基础类,它帮我们实现了生命接口及MBean接口,使我们只需专注阀门的逻辑处理即可。需要注意的地方是一定要执行调用下一个阀门操作,即执行getNext().invoke(request,response),否则运行时将出现错误,请求到这个阀门就停止往下处理。

public classPrintIPValve extends ValveBase{

     @Override

     publicvoid invoke(Request request, Response response) throws IOException,

                        ServletException{

               System.out.println(request.getRemoteAddr());

               getNext().invoke(request,response);

     }

}

 

② 配置tomcat服务器配置server.xml,这里把阀门配到Engine容器下,这样作用范围即在整个引擎,你也可以根据作用范围配置Host或Context下。

<Server port="8005"shutdown="SHUTDOWN">

……

<Engine name="Catalina"defaultHost="localhost">

<ValveclassName="org.apache.catalina.valves.PrintIPValve" />

……

</Engine>

……

</Server>

③ 将PrintIPValve类编译成.class文件,可以导出一个jar包放入tomcat安装目录lib目录下,也可直接将.class文件放入tomcat官方包catalina.jar中,这里的包名为org.apache.catalina.valves。

经过上面三个步骤配置好阀门,启动tomcat后对其进行的任何请求访问的客户端的IP都将被记录到日志中。除了自定义阀门以外,tomcat的开发者也十分友好,为我们提供了很多常用的阀门,对于这些阀门我们就无需再自定编写阀门类,要做的仅仅是在server.xml中配置即可生效。

l  AccessLogValve,请求访问日志阀门,通过此阀门可以记录所有客户端的访问日志,包括远程主机IP、远程主机名、请求方法、请求协议、会话id、请求时间、处理时长、数据包大小等等。它提供了任意参数化的配置,可以通过任意组合来定制你的访问日志格式。

l  JDBCAccessLogValve,同样是记录访问日志的阀门,但此类帮助将访问日志通过jdbc持久化到数据库中。

l  ErrorReportValve,这是一个将错误以html格式输出的阀门。

l  PersistentValve,这是对每个请求的会话实现持久化的阀门。

l  RemoteAddrValve,这是一个访问控制阀门,通过配置可以决定哪些ip可以访问web应用。

l  RemoteHostValve,这也是一个访问控制阀门,与RemoteAddrValve不同的是它是通过主机名限制访问者。

l  RemoteIPValve,这是一个针对代理或负载均衡处理的一个阀门,一般经过代理或负载均衡转发的请求都将自己的IP添加到请求头部"X-Forwarded-For"中,此时可以通过此阀门可以获取访问者真实的IP。

l  SemaphoreValve,这是一个控制容器上并发访问的阀门,可以作用在不同容器上。例如放在Context则整个上下文只允许若干线程同时访问,并发数量可以自己配置。

在实际的使用过程中,如果你需要的阀门tomcat已经帮你写好,则只需要对配置文件进行配置即可生效,如果无法满足自己需求的话则可以通过自己定义一个阀门。


点击订购作者《Tomcat内核设计剖析》



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
24天前
|
安全 应用服务中间件 网络安全
Tomcat如何配置PFX证书?
【10月更文挑战第2天】Tomcat如何配置PFX证书?
116 7
|
24天前
|
存储 算法 应用服务中间件
Tomcat如何配置JKS证书?
【10月更文挑战第2天】Tomcat如何配置JKS证书?
176 4
|
3月前
|
网络协议 Java 应用服务中间件
tomcat配置域名及HTTPS
tomcat配置域名及HTTPS
|
3月前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
16天前
|
Java Shell 应用服务中间件
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
这篇文章介绍了如何在Mac系统下配置Java JDK、Maven和Tomcat的环境变量,包括配置文件的选择、解决环境变量在zsh shell中无效的问题、查看和设置系统环境变量的方法,以及JDK和Maven的下载、配置和测试步骤。
490 1
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
|
2月前
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
24天前
apache+tomcat配置多站点集群的方法
apache+tomcat配置多站点集群的方法
29 4
|
24天前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
30 3
|
6月前
|
安全 网络协议 应用服务中间件
tomcat 状态页 及常见配置
tomcat 状态页 及常见配置
|
3月前
|
缓存 Java 应用服务中间件
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)