Java 访问URL时按Tomcat 7上的IP地址范围阻止访问

Java 访问URL时按Tomcat 7上的IP地址范围阻止访问,java,tomcat,Java,Tomcat,如何在tomcat/application上配置web.xml文件,以实现以下目标: 允许: localhost/app/foo/bar/* 不允许: localhost/app/foo 有没有一种不改变源代码的方法?更改web.xml文件是可以的 我读过,但单凭这一点并不能解决问题 我尝试了以下方法: <filter> <filter-name>Remote IP Filter</filter-name> <filter-cla

如何在tomcat/application上配置web.xml文件,以实现以下目标:

允许:

  • localhost/app/foo/bar/*
不允许:

  • localhost/app/foo
有没有一种不改变源代码的方法?更改web.xml文件是可以的

我读过,但单凭这一点并不能解决问题

我尝试了以下方法:

<filter>
    <filter-name>Remote IP Filter</filter-name>
    <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
    <init-param>
        <param-name>deny</param-name>
        <param-value>^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$</param-value>
    </init-param>

    <init-param>
        <param-name>denyStatus</param-name>
        <param-value>403</param-value>
    </init-param>
</filter>
<filter>
    <filter-name>Allow quickview</filter-name>
    <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
    <init-param>
        <param-name>allow</param-name>
        <param-value>^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$</param-value>
    </init-param>

    <init-param>
        <param-name>denyStatus</param-name>
        <param-value>403</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>Allow quickview</filter-name>
    <url-pattern>/foo/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>Remote IP Filter</filter-name>
    <url-pattern>/</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>Allow quickview</filter-name>
    <url-pattern>/foo/*</url-pattern>
</filter-mapping>

<!-- disallowed, will throw 403 -->
<filter-mapping>
    <filter-name>Remote IP Filter</filter-name>
    <url-pattern>/foo/index.jsp</url-pattern>
</filter-mapping>

远程IP筛选器
org.apache.catalina.filters.RemoteAddrFilter
否认
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
致密状态
403
允许快速查看
org.apache.catalina.filters.RemoteAddrFilter
允许
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
致密状态
403
允许快速查看
/福/*
远程IP筛选器
/
谢谢

您的
不符合问题中所述的要求。你说你想禁止
/app/foo/*
,但允许
/app/foo
。你想要这个,那么:

<filter-mapping>
    <filter-name>Allow quickview</filter-name>
    <url-pattern>/foo/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>Remote IP Filter</filter-name>
    <url-pattern>/foo</url-pattern>
</filter-mapping>

允许快速查看
/福/*
远程IP筛选器
/福

最后,我通过以下方法解决了这个问题:

<filter>
    <filter-name>Remote IP Filter</filter-name>
    <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
    <init-param>
        <param-name>deny</param-name>
        <param-value>^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$</param-value>
    </init-param>

    <init-param>
        <param-name>denyStatus</param-name>
        <param-value>403</param-value>
    </init-param>
</filter>
<filter>
    <filter-name>Allow quickview</filter-name>
    <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
    <init-param>
        <param-name>allow</param-name>
        <param-value>^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$</param-value>
    </init-param>

    <init-param>
        <param-name>denyStatus</param-name>
        <param-value>403</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>Allow quickview</filter-name>
    <url-pattern>/foo/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>Remote IP Filter</filter-name>
    <url-pattern>/</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>Allow quickview</filter-name>
    <url-pattern>/foo/*</url-pattern>
</filter-mapping>

<!-- disallowed, will throw 403 -->
<filter-mapping>
    <filter-name>Remote IP Filter</filter-name>
    <url-pattern>/foo/index.jsp</url-pattern>
</filter-mapping>

允许快速查看
/福/*
远程IP筛选器
/foo/index.jsp

关键是将index.jsp添加为“/”单独使用不起作用。

您所说的“单独使用不会解决问题”是什么意思?您是否使用spring上下文侦听器?请展示您的web.xml。我考虑过以重叠的方式声明2个筛选器映射,但只应用了其中一个。我建议在tomcat服务器前面安装一个apache http服务器。然后你可以有一个简单的规则来拒绝访问。我想nginx或apache可以很容易地完成这项工作,但我在我的商店里做不到