我有一个运行Apache Tomcat并使用Spring开发的服务器端应用程序。我需要阻止一些用户访问本地网络之外的应用程序。 我一直在寻找,但我找不到解决这个问题的方法。 Spring是否提供了根据权限限制用户内部/外部访问的功能?
答案 0 :(得分:3)
servlet规范允许您查看远程IP地址ServletRequest#getRemoteAddr()
。限制IP地址访问的传统方法是使用 servlet过滤器将IP地址范围列入白名单或黑名单。您可以搜索可以添加到spring应用程序的servlet过滤器实现。你只需要配置它。但是......确保您选择的帐户实施以下内容。如果你找不到一个可以解释的问题,可以考虑自己编写。
需要注意的一点是,服务器看到的“远程地址”无法保证完全识别客户端计算机。这是一个网络问题,而不是Spring / servlet问题。服务器看到的远程地址,甚至可能是您自己内部网络上的负载均衡器或其他网络设备的IP。
了解HTTP标头X-Forwarded-For。如果内部网络上的反向代理或某些配置中的负载平衡器在TCP / IP堆栈(例如HTTP)中的应用层转发请求,那么在HTTP的情况下更改服务器看到的原始IP该设备通常会包含或添加原始IP到此标头。实际上,如果请求通过发起组织中的几个 NAT或代理或在Internet上途中传递,则此标头可以包含原始IP地址的列表在到达你自己的网络之前。
我建议保守的允许的地址的白名单,而不是黑名单上的禁止地址。如果您的网络架构发生了变化,这可能会更加强大,但如果在内部网络上重新分配IP,您仍需要小心。
您的servlet过滤器可以使用ServletRequest#getRemoteAddr()
的组合并解析X-Forwarded-For
标题。
还要记住在您的设计和白名单或黑名单中包含任何IPv6地址。
答案 1 :(得分:0)
是的,在使用XML表达式时,您可以使用hasIpAddress(String)
的Web安全例外
答案 2 :(得分:0)
我对Spring一无所知,但是,假设您可以访问Tomcat的配置文件,您可以在Tomcat本身的配置文件或特定的webapps中设置Valve
来过滤基于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/