的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>
定制请求代理转发。
此自定义程序查看HTTP请求的标头,表明它已被一个或多个代理转发。具体处理是
Forwarded
,如通过定义rfc7239X-Forwarded-Host
X-Forwarded-Server
X-Forwarded-For
X-Forwarded-Proto
X-Proxied-Https
如果这些标头存在,则会更新
Request
对象,以便代理不会被视为请求出现的连接的另一端点还可以定义标头,以便转发的SSL会话标识和密码套件可以被定制
这绝对是正确的方式,但经过一些裂缝,我似乎无法通过[spring jetty模块]初始化ForwardedRequestCustomizer(http://www.eclipse.org/jetty/文档/电流/ frameworks.html#_jetty_spring_module) – Vince