0

我有一个运行 Apache Tomcat 并使用 Spring 开发的服务器端应用程序。我需要阻止某些用户访问本地网络之外的应用程序。我一直在寻找一段时间,但我找不到解决这个问题的方法。Spring 是否提供了基于用户权限限制用户内部/外部访问的功能?

4

3 回答 3

5

servlet 规范允许您查看远程 IP 地址,ServletRequest#getRemoteAddr(). 通过 IP 地址限制访问的传统方法是使用servlet 过滤器将 IP 地址范围列入白名单或黑名单。您可以搜索可以添加到 spring 应用程序的 servlet 过滤器实现。你只需要配置它。但是......确保您选择的实施方案考虑到以下内容。如果你找不到一个可以解释这个的,考虑写你自己的。

需要注意的主要一点是,您的服务器看到的“远程地址”根本不能保证识别客户端计算机。这是一个网络问题,而不是 Spring/servlet 问题。您的服务器看到的远程地址,甚至可能是您自己内部网络上的负载平衡器或其他网络设备的 IP。

阅读 HTTP 标头X-Forwarded-For。如果您的内部网络上的反向代理或某些配置中的负载平衡器在 TCP/IP 堆栈(例如 HTTP)中的应用程序层转发请求,并因此更改您的服务器所看到的原始 IP,在 HTTP 的情况下该设备通常会在此标头中包含或添加原始 IP。事实上,这个标头可以包含原始 IP 地址列表,以防请求在到达您自己的网络之前通过原始组织中的多个NAT 或代理或 Internet 上的路径。

我建议将允许的地址列入保守的白名单,而不是将禁止的地址列入黑名单。如果您的网络架构发生了变化,这可能会更加健壮,但是如果在内部网络上重新分配 IP,您仍然需要小心。

您的 servlet 过滤器可以结合使用ServletRequest#getRemoteAddr()并解析X-Forwarded-For标头。

还要记住在您的设计和白名单或黑名单中包含任何 IPv6 地址。

于 2012-07-31T13:32:48.103 回答
0

我对 Spring 一无所知,但是,假设您可以访问 Tomcat 的配置文件,您可以Valve在 Tomcat 本身或特定 webapps 的配置文件中设置一个以根据 IP 地址过滤访问。

http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html#Remote_Address_Filter http://vicker313.wordpress.com/2010/11/05/restrict-ip-coming-to-tomcat-service /

于 2012-07-31T12:59:25.877 回答
0

hasIpAddress(String)是的,您可以在使用 XML 表达式时使用 Web 安全异常

链接:15.2 Web 安全表达式

于 2012-07-31T12:55:12.977 回答