我有一个 Grails 应用程序,我希望通过 IP 锁定它,以便只有多个 IP 范围可以访问该应用程序。我在 Config 中使用 Spring Security 命令来实现此目的:
grails.plugins.springsecurity.ipRestrictions
然后,当在云(Jelastic)中运行应用程序时,即使我位于我列出的 IP 之一上,它也不允许我访问我想要的区域。然后,我在下面所示的应用程序中添加一些代码来拉回客户端的地址,它显示的可能是云代理服务器的地址,而不是使用该应用程序的客户端的地址:
request.getRemoteAddr()
我认为它不会让我访问我想要的区域,因为它会将我的 IP 读取为云代理的 IP,我还尝试运行下面的命令来查看它们是否返回我的实际 IP,但是它们是全部为空:S
request.getHeader("X-Forwarded-For");
request.getHeader("Proxy-Client-IP");
request.getHeader("WL-Proxy-Client-IP")
request.getHeader("HTTP_CLIENT_IP")
request.getHeader("HTTP_X_FORWARDED_FOR")
我只需要知道是否有某种方法可以通过客户端 IP 而不是使用云代理的 IP 来限制此应用程序在云中的运行?提前致谢
最佳答案
对 Jelastic 实例的所有请求都通过基础设施全局解析器发出。
所以,你是对的,request.getRemoteAddr()
返回解析器的 IP,但你的允许列表无法识别它。
解决此问题的方法是购买 external IP用于 Jelastic 中的应用程序服务器。在这种情况下,所有请求都将直接到达您的实例。
我还建议您加入专用的Jelastic Community以便分享您的经验并获得他人的帮助。
关于security - Grails 在部署到云时获取客户端 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13142733/