簡體   English   中英

如何從類路徑以外的外部位置加載cxf wss4j crypto屬性文件

[英]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版本。 這是通過擴展WSS4JInInterceptorWSS4JOutInterceptor ,然后覆蓋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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM