的Spring Security(网络安全表达式) - 过滤IP上时,负载平衡器

问题描述:

我们有一个不老泉(〜3.0)的应用程序,我们已经增加了一些IP地址与类似于Web安全过滤表达背后:的Spring Security(网络安全表达式) - 过滤IP上时,负载平衡器

<http use-expressions="true">  
    <intercept-url pattern="/login" filters="none" access="hasIpAddress('192.168.1.50')"/> 
</http> 

这工作正常,但后面的负载平衡器,每个人都从/login不允许的,因为我们要过滤的实际地址是在x-forwarded-host头了。

有没有一种方法(通过配置),我可以让Spring Security的了解x-forwarded-*头?还是有不同的网络安全表达式我可以用于这种情况?

PS。我lied..it年代x-forwarded-for头我真的想在过滤

您可以配置码头使用起源IP,而不是代理服务器的IP,看到Jetty Documentation

X转发,对于配置

X-Forwarded-for头和相关联的标头是一个事实上的标准,其中中介添加到它们转发到描述始发连接的每个请求的HTTP标头。这些头可以通过的ForwardedRequestCustomizer一个实例,其可以被添加到一个HttpConfiguration解释如下:

<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration"> 
    <Set name="outputBufferSize">32768</Set> 
    <Set name="requestHeaderSize">8192</Set> 
    <Set name="responseHeaderSize">8192</Set> 

    <Call name="addCustomizer"> 
     <Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg> 
    </Call> 
</New> 

ForwardedRequestCustomizer

定制请求代理转发。

此自定义程序查看HTTP请求的标头,表明它已被一个或多个代理转发。具体处理是

  • Forwarded,如通过定义rfc7239
  • X-Forwarded-Host
  • X-Forwarded-Server
  • X-Forwarded-For
  • X-Forwarded-Proto
  • X-Proxied-Https

如果这些标头存在,则会更新Request对象,以便代理不会被视为请求出现的连接的另一端点

还可以定义标头,以便转发的SSL会话标识和密码套件可以被定制

+0

这绝对是正确的方式,但经过一些裂缝,我似乎无法通过[spring jetty模块]初始化ForwardedRequestCustomizer(http://www.eclipse.org/jetty/文档/电流/ frameworks.html#_jetty_spring_module) – Vince