Spring Security(Web安全表达式) - 在负载均衡器后面过滤IP

时间:2016-11-25 11:31:58

标签: spring-mvc spring-security jetty

我们有一个旧的Spring(~v3.0)应用程序,我们已经添加了一些IP地址过滤到类似于的Web安全表达式:

<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-*标头?或者我可以在这种情况下使用不同的 Web安全表达式吗?

PS。我撒谎..这是我真正想要过滤的x-forwarded-for标题

1 个答案:

答案 0 :(得分:0)

您可以将Jetty配置为使用原始IP而不是代理的IP,请参阅Jetty Documentation

  

X-Forward-for Configuration

     

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会话ID和密码套件