最近一直研究SOAP消息的安全通信方式,没在网上搜到啥靠谱的,就一步一步摸索,终于成功了,把过程整理出来,供大家参考。
废话不多说,关于怎么用Axis2发布Web Service,WS-Security是啥,什么是Rampart、和WSS4J又是什么关系,SOAP消息等等的问题不是本文的重点,这里推荐一篇文章,是用Axis2+Rampart实现证书认证方式的WS-Security,写的比较好,对相关的概念也有部分介绍,必须得赞一个,一系列的文章也都写的非常好,值得细细品读。
地址:http://blog.youkuaiyun.com/lifetragedy/article/details/7844589
1、 服务端
最终建好的工程截图如下:
a) 建立Axis2的工程
b) 添加相关的Jar包,Axis2、Rampart的jar包都需要有,由于本项目中还用到了数据库,所以也添加了jdbc的jar包。
c) 之后在WEB-INF/modules目录下添加rampart模块,将rampart-1.6.2.mar和rahas-1.6.2.mar两个文件直接拷过来即可。
d) 之后就是在配置文件services.xml中添加rampart的配置,内容如下:
<module ref="rampart" />
<!--
<parameter name="OutflowSecurity">
<action>
<items>UsernameToken</items>
<user>administrator</user>
<passwordCallbackClass>com.rampart.client.ClientAuthHandler
</passwordCallbackClass>
</action>
</parameter>
-->
<parameter name="InflowSecurity">
<action>
<items>UsernameToken</items>
<passwordCallbackClass>com.rampart.WsServiceAuthHandler</passwordCallbackClass>
</action>
</parameter>
因为服务端只是对访问请求进行验证,所以对OutflowSecurity参数不做设置。InflowSecurity参数项配置里面的passwordCallbackClass需要配置自己写的回调函数的类名,代码如下:
package com.rampart;
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.log4j.Logger;
import org.apache.ws.security.WSPasswordCallback;
public class WsServiceAuthHandler implements CallbackHandler
{
private final static String USERNAME = "administrator";
private final static String PASSWORD = "123456";
private Logger log = Logger.getLogger(WsServiceAuthHandler.class);
/**
* 〈一句话功能简述〉 〈功能详细描述〉
*
* @see javax.security.auth.callback.CallbackHandler#handle(jav