Tomcat Valve设置

时间:2009-12-03 12:32:41

标签: java configuration tomcat

我认为我遇到了一些配置问题。我需要保护 从我的实际tomcat应用程序中访问的文件夹 某个IP范围。

我认为这是serverfault,所以我发布了问题there。 现在我不确定这是SO还是SF呢......

尽管如此,我一直在努力尝试自己去做并想出来 我需要设置

org.apache.catalina.valves.RemoteAddrValve

我的那个文件夹。可悲的是,我无法得到我需要的地方 设置。 web.xml,server.xml?试过这两个,成功无效。任何人都可以 帮助我解决这个问题。

TIA

ķ

4 个答案:

答案 0 :(得分:7)

它应该进入server.xml中的<Context>元素:

<Context
    path="/tcadmin"
    docBase="${catalina.home}/server/webapps/admin"
    privileged="true"
>
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        allow="127\.0\.0\.1"
    />
</Context>

请记住,字符串值是正则表达式模式,因此必须使用反斜杠转义特殊的正则表达式字符(例如点(。))。

编辑:回复OP的评论。 我认为您需要在Web应用程序中实现FILTER并将其配置为根据远程地址IP接受或拒绝请求。可以从传递到ServletRequest方法的doFilter对象中检索远程地址。

您在web.xml文件中声明了一个过滤器:

<filter>
  <filter-name>GatekeeperFilter</filter-name>
  <filter-class>your.package.GatekeeperFilter</filter-class>
  <init-param>
    <param-name>allowedNetwork</param-name>
    <param-value>192\.168\.2\.*</param-value>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>GatekeeperFilter</filter-name>
  <url-pattern>/path/to/protected/folder</url-pattern>
</filter-mapping>

阅读链接文章,了解接受init参数需要做些什么。我认为,对于您的决策,您可以无耻地复制RequestDumperValve中的代码。

答案 1 :(得分:4)

您需要将其放在<Context>元素中,该元素定义相关的Web应用程序。

对于Tomcat,它可以是多个位置,在每个特定于webapp(和webapp控制)/META-INF/context.xml或特定于服务器(和服务器控制)/conf/[enginename]/[hostname]/context.xml或特定于服务器的全局下/conf/context.xml或特定主机/conf/server.xml。另请参阅Tomcat Context documentation

答案 2 :(得分:3)

上周有同样的需求(但出于其他原因)并创建了一个阀门来阻止路径请求。它基于org.apache.catalina.valves.RequestFilterValve

用法:

<Valve className="se.qbranch.tomcat.valve.BlockAccessByPathValve" path="/manager/.*" allow="127\.0\.0\.1"/>

阀门可以像任何阀门一样在发动机,主机或上下文中使用,并且可以在GitHub上使用。 http://github.com/xlson/tomcat-valves

如果能解决您的问题,我建议您在应用程序中使用默认的tomcat valve或servlet过滤器。我们需要自定义阀门的原因是,即使我们在应用程序的RemoteAddrValve元素中使用了<Context>,tomcat管理应用程序Psi-Probe的某些部分也会“泄漏”。

答案 3 :(得分:2)

Tomcat Valve可以应用于整个引擎,主机或特定的上下文(webapp)。您必须为整个应用程序使用它,而不是特定的路径或目录。

您应该在META-INF / context.xml或conf / Catalina / [host]目录中的上下文片段中进行设置。例如,

<Context path="/myapp" ...>
  ...
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="10.1.2.*"/>
</Context>