java 手动解析soap消息_java – 如何手动加密SOAP消息?

如果可能,您可以使用Axis2和Rampart.我已经在类似的情况下成功地使用了它们.

Rampart是一个用于处理安全性的axis2模块,它暴露了一个API,允许您定义要使用的密钥存储位置和别名,从而允许您动态定义它.

示例代码:

private static final String CONFIGURATION_CTX = "src/ctx";

private static final String KEYSTORE_TYPE = "org.apache.ws.security.crypto.merlin.keystore.type";

private static final String KEYSTORE_FILE = "org.apache.ws.security.crypto.merlin.file";

private static final String KEYSTORE_PWD = "org.apache.ws.security.crypto.merlin.keystore.password";

private static final String PROVIDER = "org.apache.ws.security.components.crypto.Merlin";

private static void engageRampartModules(Stub stub)

throws AxisFault, FileNotFoundException, XMLStreamException {

ServiceClient serviceClient = stub._getServiceClient();

engageAddressingModule(stub);

serviceClient.engageModule("rampart");

serviceClient.engageModule("rahas");

RampartConfig rampartConfig = prepareRampartConfig();

attachPolicy(stub,rampartConfig);

}

/**

* Sets all the required security properties.

* @return rampartConfig - an object containing rampart configurations

*/

private static RampartConfig prepareRampartConfig() {

String certAlias = "alias"; //The alias of the public key in the jks file

String keyStoreFile = "ctx/client.ks";

String keystorePassword = "pwd";

String userName = "youusename";

RampartConfig rampartConfig = new RampartConfig();

//Define properties for signing and encription

Properties merlinProp = new Properties();

merlinProp.put(KEYSTORE_TYPE, "JKS");

merlinProp.put(KEYSTORE_FILE,keyStoreFile);

merlinProp.put(KEYSTORE_PWD, keystorePassword);

CryptoConfig cryptoConfig = new CryptoConfig();

cryptoConfig.setProvider(PROVIDER);

cryptoConfig.setProp(merlinProp);

//Rampart configurations

rampartConfig.setUser(userName);

rampartConfig.setUserCertAlias(certAlias);

rampartConfig.setEncryptionUser(certAlias);

rampartConfig.setPwCbClass("com.callback.tests.PasswordCallbackHandler"); //Password Callbak class

rampartConfig.setSigCryptoConfig(cryptoConfig);

rampartConfig.setEncrCryptoConfig(cryptoConfig);

return rampartConfig;

}

/**

* attach the security policy to the stub.

* @param stub

* @param rampartConfig

* @throws XMLStreamException

* @throws FileNotFoundException

*/

private static void attachPolicy(Stub stub, RampartConfig rampartConfig) throws XMLStreamException, FileNotFoundException {

Policy policy = new Policy();

policy.addAssertion(rampartConfig);

stub._getServiceClient().getAxisService().getPolicySubject().attachPolicy(policy);

}

PasswordCallbackHandler:

import java.io.IOException;

import javax.security.auth.callback.Callback;

import javax.security.auth.callback.CallbackHandler;

import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class PasswordCallbackHandler implements CallbackHandler {

// @Override

public void handle(Callback[] callbacks) throws IOException,

UnsupportedCallbackException {

for (int i = 0; i < callbacks.length; i++) {

WSPasswordCallback pwcb = (WSPasswordCallback) callbacks[i];

String id = pwcb.getIdentifer();

switch (pwcb.getUsage()) {

case WSPasswordCallback.USERNAME_TOKEN: {

if (id.equals("pwd")) {

pwcb.setPassword("pwd");

}

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值