xfire的webservice安全机制之加密(二)

xfire的webservice安全机制

下面是客户端调用的配置
如果按照我上次采用的那个整合XFIRE和SPRING的办法,需要修改的东西很少,
配置文件做如下修改:
<bean name="tuserManagerXfire"
class="com.sillycat.plugin.webservice.xfire.XFireClientFactory">
<property name="serviceURL" value="http://192.168.10.103/ipcamera/services/UserServiceEnc"/>
<property name="serviceClassName" value="com.megaeyes.ipcamera.service.webservice.iface.UserService"/>
</bean>
嘿嘿。其实改的就是URL,改了一个
http://192.168.10.103/ipcamera/services/UserServiceEnc
调用了加密后的接口

然后我写的那个XFireClientFactory.java里面要做一个修改,加入如下代码:
public Object getObject() throws Exception {
String url = this.getServiceURL();
Class sClass = null;
try {
sClass = Class.forName(this.getServiceClassName());
} catch (ClassNotFoundException e) {
log.error(e.getMessage(), e);
return null;
}
Assert.notNull(url);
Assert.notNull(sClass);
Service serviceModel = new ObjectServiceFactory().create(sClass);
try {
Object obj = serviceFactory.create(serviceModel, url);
//加入了加密的内容
getEnc(obj);
return obj;
} catch (MalformedURLException e) {
log.error(e.getMessage(), e);
return null;
}
}

public void getEnc(Object service) {
Client client = ((XFireProxy) Proxy.getInvocationHandler(service))
.getClient();
// 挂上WSS4JOutHandler,提供认证
client.addOutHandler(new DOMOutHandler());
Properties properties = new Properties();

properties.setProperty(WSHandlerConstants.ACTION,
WSHandlerConstants.ENCRYPT);
properties.setProperty(WSHandlerConstants.USER, "tianyi");
// config.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS,
// PasswordHandler.class.getName());
// Configuration of public key used to encrypt message goes to
// properties file.
properties
.setProperty(
WSHandlerConstants.ENC_PROP_FILE,
"outsecurity_enc.properties");
client.addOutHandler(new WSS4JOutHandler(properties));
}

其实就把原来的方法改了,在返回调用前,先调用了getEnc(obj);这个方法,挂上了加密这个动作。

有个比较土的地方要修改一下,就是代码里面还有一个
properties.setProperty(WSHandlerConstants.USER, "tianyi");
写死的传递用户名的。嘿嘿。改成从配置中读取吧。

在客户端的properties文件中,这么写outsecurity_enc.properties:
#加密的类
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
#打开加密的文件的密码
org.apache.ws.security.crypto.merlin.keystore.password=ipcamera
#公匙的名字
org.apache.ws.security.crypto.merlin.file=tianyi_public.jks

这样客户端就配置完成了。调用原来那个
public void testGetUser() {
UserService userService = (UserService) appContext
.getBean("tuserManagerXfire");
IUserInfo iuserInfo = new IUserInfo();
iuserInfo.setId("0000000000000000000000000000119");
IUserInfoResult result = userService.getUser(iuserInfo);
assertNotNull(result);
System.out.println(result.getErrorCode());
System.out.println(result.getMessage());
System.out.println(result.getLogonName());
}
就可以测试了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值