我正在运行Tomcat 6来提供多个网络应用程序,其中大多数是面向公众的。但是我想限制只访问一个 webapp,只允许来自localhost的连接。
我可以使用context.xml中的阀门限制所有 webapps的访问权限,如下所述:
但我无法弄清楚如何基于每个应用限制访问。有没有办法用我的应用程序的web.xml执行此操作?或者通过向context.xml添加其他规则?
谢谢,
-B
$ cp /var/lib/tomcat6/conf/context.xml \
/var/lib/tomcat6/conf/Catalina/localhost/my-app-name.xml
$ cat /var/lib/tomcat6/conf/Catalina/localhost/my-app-name.xml
<Context>
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="localhost"/>
... {as previously} ...
</Context>
答案 0 :(得分:9)
您可以为您的应用创建单独的context.xml。
这是Tomcat doc关于上下文配置的摘录: 可以明确定义上下文元素:
$CATALINA_HOME/conf/context.xml
文件中:所有Web应用程序都将加载Context元素信息。
在$CATALINA_HOME/conf/[enginename]/[hostname]/context.xml.default
文件中:Context元素信息将由该主机的所有Web应用程序加载。.xml
目录中的单个文件(扩展名为$CATALINA_HOME/conf/[enginename]/[hostname]/
)中。文件名(少于.xml
)扩展名将用作上下文路径。可以使用#
来定义多级上下文路径,例如, foo#bar.xml
的上下文路径为/foo/bar
。可以使用名为ROOT.xml
的文件来定义默认Web应用程序。$CATALINA_HOME/conf/[enginename]/[hostname]/
中的应用程序不存在上下文文件时;在应用程序文件中/META-INF/context.xml
的单个文件中。如果Web应用程序打包为WAR,则/META-INF/context.xml
将被复制到$CATALINA_HOME/conf/[enginename]/[hostname]/
并重命名以匹配应用程序的上下文路径。一旦此文件存在,如果在主机的appBase中放置了具有较新/META-INF/context.xml
的新WAR,则不会替换该文件。答案 1 :(得分:1)
允许localhost
对我不起作用。我改用RemoteAddrValve
。请记住,有些系统使用IPv4地址(您的过滤器必须匹配匹配127.0.0.1
),而其他系统使用IPv6地址(匹配完整地址,而不是缩写符号,如::1
)。
<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="0:0:0:0:0:0:0:1,127\.0\.0\.1" />
</Context>
属性allow
采用正则表达式,因此需要对点进行转义。 explained by Dmitry Negoda为/META-INF/context.xml
。
答案 2 :(得分:0)
转到以下路径:C:\ Program Files \ Apache Software Foundation \ Tomcat 6.0 \ conf \ Catalina \ localhost \
在此路径下,您会找到“manager.xml”文件。
编辑“manager.xml”文件,其中包含以下内容:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1,10.100.1.2"/>
<!-- Link to the user database we will get roles from
<ResourceLink name="users" global="UserDatabase"
type="org.apache.catalina.UserDatabase"/>
-->
** * ** * 保存并运行服务器.. ..你说对了。 注意:127.0.0.1表示您的系统IP 10.100.1.2 - 这是你的朋友