文章来源:http://blog.csdn.net/wwwgeyang777/article/details/19928631
最近一直研究SOAP消息的安全通信方式,没在网上搜到啥靠谱的,就一步一步摸索,终于成功了,把过程整理出来,供大家参考。
废话不多说,关于怎么用Axis2发布Web Service,WS-Security是啥,什么是Rampart、和WSS4J又是什么关系,SOAP消息等等的问题不是本文的重点,这里推荐一篇文章,是用Axis2+Rampart实现证书认证方式的WS-Security,写的比较好,对相关的概念也有部分介绍,必须得赞一个,一系列的文章也都写的非常好,值得细细品读。
地址:http://blog.csdn.net/lifetragedy/article/details/7844589
最终建好的工程截图如下:
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的配置,内容如下:
因为服务端只是对访问请求进行验证,所以对OutflowSecurity参数不做设置。InflowSecurity参数项配置里面的passwordCallbackClass需要配置自己写的回调函数的类名,代码如下:
具体什么什么的看注释就行了,可以说是综合了网上能找的所有资料里面感觉有道理的说明的总和了。
e) 再然后就发布服务就行了。
客户端的配置相对来说就比较麻烦了,一步一步来吧。
客户端只要建立普通的Java工程就行了,最终工程截图如下:
a) 新建Java工程
b) 同样添加相关的Jar包,Axis2、Rampart的jar包都需要有。
c) 这里就在src下面新建个repository的目录,将axis2.xml文件从Axis2的conf目录下拷过来,然后再将modules目录全部拷过来。
d) 之后是新建类,编写调用的客户端代码,其中的关键代码如下:
e) 这样就能调用了吗?还没有完,还要配置?对,就是配置,不过这里配置的是拷过来axis2.xml文件,添加内容如下:
因为是调用的代码,只需要配置OutflowSecurity就行了,不需要的InflowSecurity给注释掉。OutflowSecurity中设置的passwordCallbackClass多对应的回调函数的代码也给贴出来了,如下:
f) 好了,可以调用了,是不是很兴奋啊!
这么多的配置到底是为了什么呢?监听下SOAP请求信息,看到request的信息如下:
<?xml version="1.0" encoding="http://schemas.xmlsoap.org/soap/envelope/" standalone="no"?>
由于代码有很多的涉及业务范围的东西,就不贴出了,有问题的话可以留言或者发消息。
写的有点仓促,很多东西都很浅显,敬请谅解!