当前位置 : 主页 > 编程语言 > java >

jsp – 使用Spring Security将https卸载到负载均衡器

来源:互联网 收集:自由互联 发布时间:2021-06-25
现在,负载均衡器处理https,然后将该https传递给我的Web服务器.因此,为每个请求处理https double.我想要做的是完全卸载https所以我的网络服务器不必处理它. 如果Web服务器认为所有请求都是
现在,负载均衡器处理https,然后将该https传递给我的Web服务器.因此,为每个请求处理https double.我想要做的是完全卸载https所以我的网络服务器不必处理它.

如果Web服务器认为所有请求都是http,我如何配置Spring Security和JSP页面?显然我必须修改< intercept-url>我的配置的元素,其requires-channel属性始终为http或any.在我的JSP页面中,我必须在< c:url value =''/>前面加上它.与${secureUrl}和${nonSecureUrl}的链接,具体取决于结果页面是否需要为https或http.控制器的重定向也需要像这样修改……还有别的吗?

修改JSP页面中的所有链接以包含方案和主机似乎非常痛苦.有没有更好的方法呢?

如果您在负载均衡器处终止SSL,则负载均衡器应发送一个标头,指示最初请求的协议.例如,F5添加了X-Forwarded-Proto.

从这里,您可以创建自定义ChannelProcessors,查看此标头而不是查看request.isSecure().然后,您可以继续使用< intercept-url requires-channel =“https”>和亲戚< c:url>.

步骤:

>子类SecureChannelProcessor和InsecureChannelProcessor重写决定().在decision()中检查负载均衡器发送的标头.

@Override
public void decide(FilterInvocation invocation, Collection<ConfigAttribute> config) throws IOException, ServletException {

  for (ConfigAttribute attribute : config) {
      if (supports(attribute)) {
          if (invocation.getHttpRequest().
                  getHeader("X-Forwarded-Proto").equals("http")) {
              entryPoint.commence(invocation.getRequest(),
                  invocation.getResponse());
          }
      }
  }
}

>然后使用BeanPostProcessor在ChannelDecisionManagerImpl bean上设置这些ChannelProcessors.有关为什么/如何使用BeanPostProcessor,请参阅此Spring Security FAQ.

网友评论