我正在尝试将所有请求限制到我的Tomcat管理器,这些请求不是来自我的IP.
到目前为止,我发现在server.xml中添加一个Valve,如下所示:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="IP"/>
Run Code Online (Sandbox Code Playgroud)
将阻止除"IP"之外的所有请求到整个Tomcat(包括webapps).有谁知道如何做同样但只适用于Tomcat经理?
顺便说一下,我正在使用Tomcat7.
我正在寻找实现自定义Valve并使用META-INF/context.xml进行配置.
目前,在部署期间解析context.xml时,Tomcat(6.0.32)在我的自定义Valve实现上死于ClassNotFoundException.
我的印象是我遇到了一个类加载上下文问题而且我并不是100%肯定我理解它.
是否找不到我的类,因为它位于WEB-INF/classes文件中,并且由于层次结构,Context级别类加载器无法找到该类?
提前致谢.
我写了一个定制的 Tomcat 阀门。(我使用的是 Tomcat 6.0.24 和 Java 1.6)这是我声明阀门的 XML 元素:
<Valve className="mypkg.MyValve" foo="bar"/>
Run Code Online (Sandbox Code Playgroud)
当我将此声明放入 server.xml 的 Host 元素中时。Tomcat 使用值“bar”调用我的 Valve 上的 setFoo() 方法。这就是我想要发生的事情。
但是,当我将相同的声明放入 web 应用程序的 META-INF/context.xml 中的 Context 元素内时,Tomcat 会加载阀门并且阀门运行良好。但 Tomcat 从不调用 setFoo() 方法来提供阀门所需的“bar”值。
我不明白为什么 Tomcat 正确配置了在 server.xml 中声明的阀门,而不是在 context.xml 中声明的阀门。
有谁知道当我的 web 应用程序的 META-INF/context.xml 中声明了我的阀门时,如何让 Tomcat 正确配置我的阀门?
谢谢,丹
这会导致 Tomcat 加载并正确配置我的阀门:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Valve className="mypkg.MyValve" foo="bar"/>
</Host>
Run Code Online (Sandbox Code Playgroud)
这会导致我的阀门加载,但 Tomcat 不会为其提供配置参数“bar”:
<Context privileged="true" >
<Valve className="mypkg.MyValve" foo="bar"/>
</Context>
Run Code Online (Sandbox Code Playgroud) 我通过扩展org.apache.catalina.valves.ValveBase类并实现inovoke()方法为Apache Tomcat编写了一个Valve.现在我想将它添加到我的Tomcat中执行?请告诉我步骤.
是否可以将 AccessLogValve 配置为在将密码写入日志文件之前隐藏/替换密码?我对阀门不熟悉,也许有办法插入自定义过滤器/阀门?
我有一个干净的tomcat7安装,启用了log4j(根据http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j)。“应用程序级”日志记录确实使用 log4j 配置(我将日志定向到本地 syslog 服务器)。如何使我的应用程序access.log也使用 log4j?据我所知,我可以在 AccessLogValve、ExtendedAccessLogValve 和 JDBCAccessLogValve 之间进行选择,但其中的一个可以让我记录到 syslog 也不能使用 log4j。
我试图调查特定HTTP请求发送到网站的频率.请求是一个POST,并且有一个名为的参数"_method".我可以在萤火虫网上看到这个.
我需要检查这个"_method"参数的值,所以按照文档http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html#Access_Log_Valve我将以下内容添加到阀门的tomcat访问配置中
%{_method}r
Run Code Online (Sandbox Code Playgroud)
但它并没有出现在访问日志中.
我想知道是因为下划线?
注意,参数名称不能更改.
valve我正在尝试在 Tomcat 中实现一个自定义,例如MyValveextends BaseValve。我创建了项目的 jar 并将其添加到Tomcat\lib文件夹中。
下一步是配置server.xml或context.xml。我都尝试过。但我的阀门类别没有被检测到。
有人可以让我知道创建阀门并使用它的步骤吗?
谢谢
我试图在tomcat中为我的.war应用程序配置独立的访问日志,但我无法弄清楚什么是失败的.
目的是为进入我的应用程序的请求分别进行访问日志记录,而不必依赖tomcat的全局访问日志.
据我所知,我应该创建自己的上下文配置文件,并使用AccessLogValve指定我要写入的位置.
我在应用程序的WAR文件中创建了META-INF/context.xml,内容如下:
<Context path="/Stubby">
<Valve class="org.apache.catalina.valves.AccessLogValve"
rotatable="true"
directory="/var/SP/log/stubby"
prefix="access.log_"
suffix=""
fileDateFormat="yyyyMMdd_HH"
pattern="combined"
buffered="false"
resolveHosts="false"
/>
</Context>
Run Code Online (Sandbox Code Playgroud)
启动tomcat时,我看到此文件被复制到conf/Catalina/localhost/Stubby.xml,但在应用程序加载例程期间存在解析错误:
SEVERE: Begin event threw exception
java.lang.NullPointerException
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
(...)
Jul 13, 2011 6:16:12 PM org.apache.catalina.startup.ContextConfig processContextConfig
SEVERE: Parse error in context.xml for /Stubby
java.lang.NullPointerException
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2806)
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2832)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1359)
Run Code Online (Sandbox Code Playgroud)
这有什么不对?我是否遗漏了声明中的任何强制性财产?
在 tomcat 中,http 访问日志 Valve 需要一些时间才能写入文件。请注意,我有 org.apache.catalina.valves.AccessLogValve 的默认配置。有什么办法可以改善延迟吗?造成这种延迟的主要原因是什么
tomcat-valve ×10
tomcat ×6
tomcat6 ×4
context.xml ×3
logging ×3
tomcat7 ×3
access-log ×1
catalina ×1
classloader ×1
java ×1