[英]how to load the cxf wss4j crypto property file from external location other than the classpath
我正在嘗試外部化簽署SOAP CXF請求消息所需的crypto.properties文件。 根據框架,它應該在類路徑中具有屬性文件。 我無法從外部加載它。 請幫助我,我嘗試了很多技巧。
我得到以下例外
org.apache.ws.security.WSSecurityException:一般安全性錯誤(無法加載資源文件:
我們已經同步了我們的開發和生產環境代碼庫,因此非常有必要對文件進行外部化
使用的CXF框架是2.6.10
如Colm O hEigeartaigh所述,可以使用最新版本的CXF和WSS4J從外部文件加載配置設置。 但是,這仍然意味着需要將屬性寫入文件並再次加載它們。
您還可以在內存中構造一個Properties對象,並讓CXF使用它。 這也適用於較舊的CXF版本。 這是通過擴展WSS4JInInterceptor
和WSS4JOutInterceptor
,然后覆蓋Crypto loadCryptoFromPropertiesFile(String propFilename, RequestData reqData)
方法並返回您自己的Crypto
對象來完成的,您可以使用CryptoFactory.getInstance(properties)
創建該對象。
所以類似於:
Properties cxfProps = new Properties();
cxfProps.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
cxfProps.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
cxfProps.setProperty("org.apache.ws.security.crypto.merlin.keystore.alias", "client");
cxfProps.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", PASSWORD);
cxfProps.setProperty("org.apache.ws.security.crypto.merlin.keystore.file", "keystore.j2");
Crypto crypto = CryptoFactory.getInstance(cxfProps);
Map<String, Object> inProps = new HashMap<String, Object>();
Map<String, Object> outProps = new HashMap<String, Object>();
inProps.put(WSHandlerConstants.ACTION, "Signature");
inProps.put(WSHandlerConstants.SIG_PROP_FILE, "dummy_value"); // Only necessary to avoid NPE
outProps.put(WSHandlerConstants.ACTION, "Signature");
outProps.put(WSHandlerConstants.USER, "client");
outProps.put(WSHandlerConstants.SIG_PROP_FILE, "dummy_value"); // Only necessary to avoid NPE
WSS4JInInterceptor wssIn = new WSS4JInInterceptor(inProps) {
@Override
protected Crypto loadCryptoFromPropertiesFile(String propFilename, RequestData reqData)
throws WSSecurityException {
return crypto;
}
};
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps) {
@Override
protected Crypto loadCryptoFromPropertiesFile(String propFilename, RequestData reqData)
throws WSSecurityException {
return crypto;
}
};
它受支持,請參閱我的評論: https : //issues.apache.org/jira/browse/WSS-540
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.