2

我有一个 Grails 应用程序,我希望通过 ip 将其锁定,以便只有一些 IP 范围可以访问该应用程序。我在 Config 中使用了 Spring Security 命令来实现这一点:

grails.plugins.springsecurity.ipRestrictions

然后在云中运行应用程序(Jelastic)时,即使我在我列出的 IP 之一上,它也不允许我访问我想要的区域。然后我在下面显示的应用程序中放置了一些代码来拉回客户端的地址,它显示了可能是云代理服务器的地址,而不是使用应用程序的客户端:

request.getRemoteAddr()

我认为它不会让我访问我想要的区域,因为它会将我的 IP 读取为云代理的 IP,我还尝试运行以下命令以查看它们中是否有任何返回我的实际 IP,但是它们都是 null :小号

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 在云中限制此应用程序?提前致谢

4

4 回答 4

4

对 Jelastic 实例的所有请求都通过基础设施全局解析器发出。

所以,你是对的,request.getRemoteAddr()返回解析器的 IP 并且它不被你的允许列表识别。

解决方法是在 Jelastic 中为您的应用服务器购买外部 IP 。在这种情况下,所有请求都将直接发送到您的实例。

我还建议您加入专门的Jelastic 社区,以分享您的经验并获得他人的帮助。

于 2012-10-31T10:58:09.747 回答
0

你有没有在你的tomcat前面配置一个nginx实例?我不确定是否有任何 jelastic 细节,但您必须配置 nginx 以便它将 ip 传递给代理服务,请参阅http://wiki.nginx.org/HttpRealIpModule

如果您不想覆盖默认值,您可以设置自定义标题:

proxy_set_header X-Real-IP $remote_addr;
于 2012-10-31T10:31:22.040 回答
0

您是否尝试过转储您在应用程序中实际获得的标头?

在 Cloudfoundry.com 上,我可以看到我得到了“x-forwarded-for”

class HeaderController {

def headerTest = {

    def headerNames = request.headerNames.collect{ it }

    headerNames.each {
        render "$it : ${request.getHeader(it)}\n"
    }

    render "Remote addr : ${request.getRemoteAddr()}\n"
    render "Forward addr : ${request.getHeader('x-forwarded-for' )}\n"

}
}
于 2012-10-31T19:13:26.693 回答
0

Jelastic 云中,“x-forwarded-for”也会显示您的 IP。

作为跟进,我建议您查看Jelastic Community上的相关主题

因此,假设您必须以检查“x-forwarded-for”值的方式设置您的 IP 限制配置。

于 2012-11-02T15:50:11.593 回答