我有一个运行Apache Tomcat的服务器端应用程序,并使用Spring开发。我需要阻止一些用户访问本地网络之外的应用程序。 我一直在寻找一段时间,但我找不到解决这个问题的方法。 Spring是否提供了基于他的权限限制用户内部/外部访问的功能?如何检查客户端是否是Java本地的
回答
是的,你可以使用当XML表达
我不知道春天什么,但是,假设你有机会到Tomcat的配置文件使用的Web安全异常与hasIpAddress(String)
,您可以设置一个Valve
在Tomcat本身的配置文件或特定的web应用程序中过滤基于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/
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地址。
我会看看这个想法,谢谢。 – Porto2112 2012-07-31 14:22:12
- 1. PHP:如何检查客户端是否是本地的?
- 2. 检查WebSocket是否是hixie客户端?
- 3. 如何检查客户端Java版本?
- 4. Mondrian是否有本地客户端?
- 5. 如何检查Parse用户是否从客户端JavaScript登录?
- 6. 如何检查客户端上的ListBox是否为空
- 7. 如何检查Pyro4客户端是否还活着
- 8. 如何检查WCF客户端通道(服务)是否终止?
- 9. 如何异步检查客户端是否断开连接?
- 10. 如何检查客户端连接是否还活着
- 11. 如何检查客户端是否已收到所有数据
- 12. 如何检查客户端是否连接到服务器?
- 13. Rails如何检查session_id cookie是否被客户端更改
- 14. 如何检查客户端是否连接到XMPP服务器
- 15. 如何检查客户端是否已断开连接?
- 16. 如何检查客户端是否不再通过Java中的TCP连接?
- 17. 检查计划的本地代理是否可以在Notes客户端运行
- 18. 检查TcpListener是否有任何连接的客户端
- 19. 检查谷歌本地客户端文件系统中是否存在目录?
- 20. 检查邮件地址是否是Gmail客户端下<Ruby>
- 21. 如何检查客户端脚本资源是否在页面中注册?
- 22. 在服务器端检查客户端验证是否成功
- 23. Perforce:是否有任何命令来检查客户端规范是否存在
- 24. 检查客户端的PC是否连接到特定的Wifi
- 25. 什么是本地客户端?
- 26. 如何检查端口是否在客户端电脑上打开?
- 27. 如何检查客户端是否可以通过端口843连接?
- 28. 如何检查Django用户是否仍然仅从客户端登录?
- 29. 如何检查用户是否授权在客户端使用JQuery?
- 30. 如何检查账户UI小部件是否加载到客户端上?
看起来像一个很好的解决方案,但由于我使用的是标准的安全符号,这将是表情符号的复杂变化。 我知道,我可以声明WebSecurityExpressionRoot作为一个bean,但我不知道我应该在构造函数中使用的参数。 – Porto2112 2012-07-31 14:16:28