我使用Spring SAML扩展,WSO2 IS作为IdP。目前,我在Spring XML配置中为MetadataGenerator设置了entityBaseURL属性。目前,由于entityBaseURL与服务器名匹配,因此可以很好地对抗单个服务器。由于我有几个环境(dev,test和UAT),我需要以编程方式设置entityBaseURL,因为每个环境都有不同的服务器名称,并且servername与entityBaseURL prop不匹配。不希望为每个环境重建WAR工件。我们为数据库中的每个环境保留配置。因此,可以在运行时读取特定于特定机器堆栈的设置和属性。我想从我们的DB中读取entityBaseURL属性的servername并以编程方式设置它。我应该用自己的类替换MetadataGenerator吗?我不清楚entityBaseURL属性的初始化位置。
答案 0 :(得分:2)
我找到了解决这个问题的可行途径。我最终扩展了MetadataGeneratorFilter类并重写了getDefaultBaseURL方法。 getDefaultBaseURL方法的默认实现是使用HTTP请求中的属性计算值。我更改了此行为以执行数据库查找并返回存储在数据库中的值。我可以在这里短缺,但这确实有效。我能够验证SAML AuthnRquest的AssertionConsumerServiceURL属性是否正确设置。生成的元数据也是正确的。
注意:仍然可以在Spring配置中手动设置entityBaseURL属性。如果是,则不使用从getDefaultBaseURL方法返回的值。