由于重写,未找到端点 URL
Endpoint URL not found because of rewriting
我们在项目中使用带有 SAML2
扩展名的 Spring Security
。目前我们想从1.0.0版本升级到1.0.3但是运行遇到了问题。
我们的应用程序 运行 在 Tomcat
中,前面有一个 Apache 网络服务器。网络服务器执行 URL 重写,这意味着到达 Tomcat 的请求与网络服务器上的请求具有不同的 URL(例如,在网络服务器上它是“/saml/SSO”,但在 Tomcat 中是“/ctx/saml/SSO”)。
I tracked down the problem to the checks done in
SAMLUtil.getEndpoint(...), which expect exact equality of the incoming
and the configured endpoint URL, but this is not the case for us
because of the rewriting. (Actually, the behaviour of this method has
changed between 1.0.0 and 1.0.3.)
我正在考虑一些变通方法来解决这个问题,但我想知道是否只有我们有这个问题。我希望在网络服务器中重写 URLs 并不少见。有没有我不知道的简单解决方案?
尝试提供 SAMLContextProviderLB Bean 实例而不是 SAMLContextProviderImpl:
java配置示例(如有需要可改成xml):
@Bean
public SAMLContextProviderImpl contextProvider() {
SAMLContextProviderLB samlContextProviderLB = new SAMLContextProviderLB();
samlContextProviderLB.setScheme("https");
samlContextProviderLB.setServerName("myserver.com");
samlContextProviderLB.setServerPort(443);
samlContextProviderLB.setIncludeServerPortInRequestURL(false);
samlContextProviderLB.setContextPath("/mycontextpath");
return samlContextProviderLB;
}
并根据您的反向代理虚拟主机服务器名称设置服务器名称。
我们在项目中使用带有 SAML2
扩展名的 Spring Security
。目前我们想从1.0.0版本升级到1.0.3但是运行遇到了问题。
我们的应用程序 运行 在 Tomcat
中,前面有一个 Apache 网络服务器。网络服务器执行 URL 重写,这意味着到达 Tomcat 的请求与网络服务器上的请求具有不同的 URL(例如,在网络服务器上它是“/saml/SSO”,但在 Tomcat 中是“/ctx/saml/SSO”)。
I tracked down the problem to the checks done in SAMLUtil.getEndpoint(...), which expect exact equality of the incoming and the configured endpoint URL, but this is not the case for us because of the rewriting. (Actually, the behaviour of this method has changed between 1.0.0 and 1.0.3.)
我正在考虑一些变通方法来解决这个问题,但我想知道是否只有我们有这个问题。我希望在网络服务器中重写 URLs 并不少见。有没有我不知道的简单解决方案?
尝试提供 SAMLContextProviderLB Bean 实例而不是 SAMLContextProviderImpl:
java配置示例(如有需要可改成xml):
@Bean
public SAMLContextProviderImpl contextProvider() {
SAMLContextProviderLB samlContextProviderLB = new SAMLContextProviderLB();
samlContextProviderLB.setScheme("https");
samlContextProviderLB.setServerName("myserver.com");
samlContextProviderLB.setServerPort(443);
samlContextProviderLB.setIncludeServerPortInRequestURL(false);
samlContextProviderLB.setContextPath("/mycontextpath");
return samlContextProviderLB;
}
并根据您的反向代理虚拟主机服务器名称设置服务器名称。