2012-07-31 36 views
0

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

回答

0

是的,你可以使用当XML表达

link: 15.2 Web Security Expressions

+0

看起来像一个很好的解决方案,但由于我使用的是标准的安全符号,这将是表情符号的复杂变化。 我知道,我可以声明WebSecurityExpressionRoot作为一个bean,但我不知道我应该在构造函数中使用的参数。 – Porto2112 2012-07-31 14:16:28

3

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

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

阅读关于HTTP标头X-Forwarded-For。如果内部网络中的某个配置中的反向代理或负载均衡器在TCP/IP堆栈中的应用层(例如HTTP)上转发请求,并且因此更改了服务器看到的源IP,则对于HTTP该设备通常会将原始IP包含或添加到此标头。其实这个头可以包含原始IP地址的列表,在该请求通过几个的NAT或代理的起源组织或途中在互联网上达到自己的网络之前通过的情况。

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

你的Servlet过滤器可以使用的ServletRequest#getRemoteAddr()组合和解析X-Forwarded-For头。

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

+0

我会看看这个想法,谢谢。 – Porto2112 2012-07-31 14:22:12

相关问题