WSS4J中密钥库的可配置位置

狮子座Literak

我有一个Spring上下文,它可以初始化CXF Web服务并通过签名检查对其进行包装:

<bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="locations">
        <list>
            <value>classpath:my.properties</value>
        </list>
    </property>
</bean>

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="properties" ref="myProperties"/>
    <property name="placeholderPrefix" value="!sp{"/>
    <property name="placeholderSuffix" value="}"/>
</bean>

<bean id="inbound-security" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
    <constructor-arg>
        <map>
            <entry key="action" value="Signature"/>
            <entry key="signaturePropFile" value="!sp{acq.signature.properties.location}"/>
        </map>
    </constructor-arg>
</bean>

我意识到signaturePropFile必须在类路径上,无法从文件系统中读取它:-(

Caused by: org.apache.ws.security.WSSecurityException: General security error (Cannot load the resource D:\Dev\Projekty\smartpos-backend-parent\smartpos-backend-acquirer\src\main\resources\signature.properties)
at org.apache.ws.security.components.crypto.CryptoFactory.getProperties(CryptoFactory.java:261) ~[wss4j-1.6.11.jar:1.6.11]
at org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:186) ~[wss4j-1.6.11.jar:1.6.11]
at org.apache.cxf.ws.security.wss4j.AbstractWSS4JInterceptor.loadCryptoFromPropertiesFile(AbstractWSS4JInterceptor.java:224) ~[cxf-rt-ws-security-2.7.5.jar:2.7.5]
at org.apache.ws.security.handler.WSHandler.loadCrypto(WSHandler.java:911) ~[wss4j-1.6.11.jar:1.6.11]

没关系,我让它成为部署的一部分,但我确实想外部化密钥库,该密钥库由以下属性定义:

org.apache.ws.security.crypto.merlin.keystore.file=server-keystore.jks

我试图用一些配置属性!sp{keystore.location}替换路径${keystore.location},但是它不起作用。实际上,它失败,并带有相同的异常,例如属性文件不存在:

Caused by: org.apache.ws.security.WSSecurityException: General security error (Cannot load the resource classpath:signature.properties)
at org.apache.ws.security.components.crypto.CryptoFactory.getProperties(CryptoFactory.java:261) ~[wss4j-1.6.11.jar:1.6.11]
at org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:186) ~[wss4j-1.6.11.jar:1.6.11]
at org.apache.cxf.ws.security.wss4j.AbstractWSS4JInterceptor.loadCryptoFromPropertiesFile(AbstractWSS4JInterceptor.java:224) ~[cxf-rt-ws-security-2.7.5.jar:2.7.5]
at org.apache.ws.security.handler.WSHandler.loadCrypto(WSHandler.java:911) ~[wss4j-1.6.11.jar:1.6.11]

配置WSS4J密钥库位置的正确方法是什么?我不喜欢在部署前编辑战争。(我使用Maven来构建它)。

Zbynek Ondrak

这个问题最近已经解决了

当使用旧版本的wss4j(v2.1.1和更早版本)时,您可以通过覆盖WSHandler.loadCrypto()并通过Spring util注入创建的Property对象来传递对属性文件(例如WSHandlerConstants.SIG_PROP_REF_ID)的String引用的需要。 ,例如:

<util:properties id="wss4jCryptoProperties">
    <prop key="org.apache.ws.security.crypto.merlin.keystore.file">!sp{keystore.file}</prop>
    <prop key="org.apache.ws.security.crypto.merlin.keystore.type">!sp{keystore.type}</prop>
    <prop key="org.apache.ws.security.crypto.merlin.keystore.password">!sp{keystore.password}</prop>
</util:properties>

通过示例覆盖WSHandler.loadCrypto():

public class PropertiesWSS4JInInterceptor extends WSS4JInInterceptor {

    private Properties cryptoProperties;

    public PropertiesWSS4JInInterceptor(Map<String, Object> inProps,
                                        Properties cryptoProperties) {
        super(inProps);
        this.cryptoProperties = cryptoProperties;
    }

    @Override
    protected Crypto loadCrypto(String cryptoPropertyFile, String cryptoPropertyRefId,
                                RequestData requestData) throws WSSecurityException {
        return CryptoFactory.getInstance(cryptoProperties);
    }
}

此外,您可以将wss4jCryptoProperties注入您的customBean中(不要忘记在所引用的类和setter中创建名为cryptoProperties的字段):

<bean id="customBean" class="cz.company.CustomBean">
    <property name="cryptoProperties" ref="wss4jCryptoProperties"/>
</bean>

最后,您可以将拦截器添加到端点:

endpoint.getInInterceptors().add(new PropertiesWSS4JInInterceptor(inProps, cryptoProperties));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用wss4j库验证soap签名

来自分类Dev

如何使用wss4j库验证soap签名

来自分类Dev

CXF 3.X和WSS4J 2.X中的CallbackHandler

来自分类Dev

cxf + wss4j + maven NoSuchMethod错误

来自分类Dev

WSS4j 1.5:如何跳过密码验证?

来自分类Dev

使用CXF和WSS4J创建信封签名

来自分类Dev

SoapFault MustUnderstand标头,CXF WSS4J没有提供加密属性文件

来自分类Dev

带有Spring WS的WSS4J(用户/密码身份验证+ .cert)

来自分类Dev

如何使用 WSS4J 在 KeyInfo 元素中生成 X509Data 和 KeyValue

来自分类Dev

如何使用Spring Boot 1.3.6.RELEASE使log4j2在环境中可配置

来自分类Dev

如何在Install4j中跳过可配置形式及其操作

来自分类Dev

install4j:从下拉列表中可配置的表单更改可见性

来自分类Dev

在文本字段中右键单击Install4j可配置形式

来自分类Dev

如何使用WSS4J拦截器以Web服务方法获取经过身份验证的用户

来自分类Dev

JAX-WS CXF WSS4J在运行时添加证书以进行消息签名

来自分类Dev

Servlet中的可配置值

来自分类Dev

库中具有可配置路径的地图控制器路线

来自分类Dev

Spring MVC中的可配置验证

来自分类Dev

模型中可配置的输入(Elm 0.13)

来自分类Dev

Neo4J 3.0中配置文件的位置是什么?

来自分类Dev

在python中更改neo4j数据库位置

来自分类Dev

ws:outbound-gateway 中的 java 密钥库配置

来自分类Dev

如何构建可配置的JUnit4测试套件?

来自分类Dev

Neo4j默认数据库位置(Windows)

来自分类Dev

从可配置的购物车中获取简单的产品

来自分类Dev

删除可配置产品中属性的依赖性

来自分类Dev

如何使python装饰器中的参数可配置?

来自分类Dev

Spartacus中可配置URL的受支持字符

来自分类Dev

骆驼Bindy:@DataField中可配置的“ pos”属性

Related 相关文章

  1. 1

    如何使用wss4j库验证soap签名

  2. 2

    如何使用wss4j库验证soap签名

  3. 3

    CXF 3.X和WSS4J 2.X中的CallbackHandler

  4. 4

    cxf + wss4j + maven NoSuchMethod错误

  5. 5

    WSS4j 1.5:如何跳过密码验证?

  6. 6

    使用CXF和WSS4J创建信封签名

  7. 7

    SoapFault MustUnderstand标头,CXF WSS4J没有提供加密属性文件

  8. 8

    带有Spring WS的WSS4J(用户/密码身份验证+ .cert)

  9. 9

    如何使用 WSS4J 在 KeyInfo 元素中生成 X509Data 和 KeyValue

  10. 10

    如何使用Spring Boot 1.3.6.RELEASE使log4j2在环境中可配置

  11. 11

    如何在Install4j中跳过可配置形式及其操作

  12. 12

    install4j:从下拉列表中可配置的表单更改可见性

  13. 13

    在文本字段中右键单击Install4j可配置形式

  14. 14

    如何使用WSS4J拦截器以Web服务方法获取经过身份验证的用户

  15. 15

    JAX-WS CXF WSS4J在运行时添加证书以进行消息签名

  16. 16

    Servlet中的可配置值

  17. 17

    库中具有可配置路径的地图控制器路线

  18. 18

    Spring MVC中的可配置验证

  19. 19

    模型中可配置的输入(Elm 0.13)

  20. 20

    Neo4J 3.0中配置文件的位置是什么?

  21. 21

    在python中更改neo4j数据库位置

  22. 22

    ws:outbound-gateway 中的 java 密钥库配置

  23. 23

    如何构建可配置的JUnit4测试套件?

  24. 24

    Neo4j默认数据库位置(Windows)

  25. 25

    从可配置的购物车中获取简单的产品

  26. 26

    删除可配置产品中属性的依赖性

  27. 27

    如何使python装饰器中的参数可配置?

  28. 28

    Spartacus中可配置URL的受支持字符

  29. 29

    骆驼Bindy:@DataField中可配置的“ pos”属性

热门标签

归档