所以这个让我难过。我已经使用属性文件多年了,但是我从未见过。
我正在使用带有SAML身份验证的Spring MVC。我的上下文xml中包含以下内容:
<context:property-placeholder location="file:/opt/saml.properties" />
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="file:/opt/mySamlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="${keystore.password}"/>
<constructor-arg>
<map>
<entry key="${privateKey.alias}" value="${key.password}"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="${privateKey.alias}"/>
</bean>
我收到此错误:
java.security.UnrecoverableKeyException: Cannot recover key
我进行了一些SO研究,他们基本上都说我输入了错误的密码,但我肯定没有。因此,要测试它正在读取正确的文件,我去替换所有属性%{}并对其进行硬编码。然后一切正常。
当我发现该文件中的其他一些属性正在运行时,我正在尝试解决这个问题!实际上,我什至可以做到:
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="file:/opt/myKeystore.jks"/>
<constructor-arg type="java.lang.String" value="${keystore.password}"/>
<constructor-arg>
<map>
<entry key="${privateKey.alias}" value="password"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="${privateKey.alias}"/>
</bean>
因此,春天从属性文件中获得了$ {keystore.password}和$ {privateKey.alias}(以及其他所需的实体ID,metadataProvider等),而不是$ {key.password}! !
这是saml.properties
#keystore stuff
keystore.password=password
key.password=password
privateKey.alias=mysaml
#SP stuff (aka, my side of things)
entity.id=mycompany:me:me:me1
entity.base.url=https://mycompany.com
#IDP stuff (aka, the SAML server)
metadata.provider=https://saml.mycompany.com/FederationMetadata/2007-06/FederationMetadata.xml
当我对密钥密码进行硬编码时,所有这些都起作用,但是当我使用$ {key.password}属性时,则不起作用。这是怎么回事?
答案 0 :(得分:0)
文件提交后还有两个斜杠
例如
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="file:///opt/myKeystore.jks"/>
<constructor-arg type="java.lang.String" value="${keystore.password}"/>
<constructor-arg>
<map>
<entry key="${privateKey.alias}" value="password"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="${privateKey.alias}"/>
</bean>