我终于让SAML SSO处理我的应用程序,该应用程序用作SP。它使用生成的元数据,但我想为生产添加预定义的元数据。
我正在尝试配置我的ExtendedMetadataDelegate bean以查看包含我的SP元数据的xml文件,但是我无法确定将文件放在何处以便spring能够看到它。
spring文档说:"将元数据文件存储为项目类路径的一部分,例如在WEB-INF / classes / metadata / localhost_sp.xml中。"我试着把它放在那个确切的位置,它无法找到它。我尝试将它放在与我的密钥库相同的位置,该密钥库位于WEB-INF下。它似乎能够很好地找到密钥库,但它也无法在那里找到元数据。
有趣的是,当我使用如下配置的FilesystemMetadataProvider时,我的Windows系统可以找到该文件,但我的unix服务器和mac上的同事不能。当应用程序在基于unix的系统上启动时,这是错误消息:org.opensaml.saml2.metadata.provider.MetadataProviderException:Metadata file' /WEB-INF/blah/filename.xml'不存在 但是应用程序继续正常运行,SSO甚至可以运行。
/WEB-INF/blah/filename.xml
当我使用如下配置的ResourceBackedMetadataProvider时,我的系统甚至无法编译,因为它无法找到该文件。错误是:嵌套异常是org.opensaml.util.resource.ResourceException:类路径资源不存在:filename.xml
我假设我需要在类路径上更改某些内容,但我不知道是否要更改构建类路径或运行类路径。我尝试将WEB-INF添加到运行类路径中,这似乎没有帮助。
提前感谢您提供任何帮助。
答案 0 :(得分:2)
文档确实说明了:Store the metadata file as part of your project classpath, e.g. in WEB-INF/classes/metadata/localhost_sp.xml.
然而,和你一样,我得到类路径错误。当我把它放入时,我发现该应用程序始终如一地提到这一点:src/main/resources/metadata/localhost_sp.xml
如果您使用WEB-INF / classes / metadata /...
,则会出现以下错误Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.opensaml.util.resource.ClasspathResource#537c9fb7' defined in ServletContext resource [/WEB-INF/sec
urityContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.opensaml.util.resource.ClasspathResource]
: Constructor threw exception; nested exception is org.opensaml.util.resource.ResourceException: Classpath resource does not exist: /metadata/localhost_sp.xml
供参考,这里是加载此元数据sp的WEB-INF/securityContext.xml
的相关部分。
<bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
<constructor-arg>
<bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
<constructor-arg>
<bean class="java.util.Timer"/>
</constructor-arg>
<constructor-arg>
<bean class="org.opensaml.util.resource.ClasspathResource">
<constructor-arg value="/metadata/localhost_sp.xml"/>
</bean>
</constructor-arg>
<property name="parserPool" ref="parserPool"/>
</bean>
</constructor-arg>
总的来说,我发现Spring Security SAML难以使用/集成/理解。
答案 1 :(得分:1)
他们的关键是&#39; /&#39;价值观:
<bean class="org.opensaml.util.resource.ClasspathResource">
<constructor-arg value="/metadata/localhost_sp.xml"/>
</bean>