一、wss4j简介
Wss4j是apache开发的,标准实现WS-Security(WebService安全)的开源项目,它提供了用户名令牌环验证(UsernameToken)和传递消息时保证信息的完整性和真实性等一些WebService安全保障。
二、环境准备
2.1开发环境准备
在正式开始前还要去下载一个rampart-1.1.mar,下载地址http://apache.hoxt.com/ws/rampart。把这个东东放到WEB-INF/modules下去
这个东东是在AXIS2上实现WSS4J必需要的一个组件。把wss4j的相关jar包导到lib下。
三、用KEYTOOL生成一对JKS文件
首先我们用keytool生成一对JKS文件, service.jks和client.jks。
service.jks存放了service的私钥和client的公钥。
client.jks存放了client的私钥和service的公钥。
本人生成的
service.jks的私钥和公钥keystore的密码是apache
client.jks的私钥和公钥keystore的密码是apache,
(注如果不会用keytool请自己看相关资料,我用的是apache提供sample的文件)
2.2搭建webservice环境
将axis2.war包拷贝到tomcat安装目录下的webapps目录下。
启动Tomcat(D:/Tomcat5.5/bin/startup.bat),打开浏览器输入并访问:http://127.0.0.1:8080/axis2 来查看,结果如下图,表示axis2已经工作正常。
四、建立web应用
4.1 编写服务器端代码
首先简单介绍我的Wss4j实现WS-Security功能,很简单就是客户端发送一个字符串,服务器端得到该字符串,同时把字符串在发送给客户端,首先自己建立一个web应用工程, 这里就以我的wsc应用工程为例
在src下建一个包com.neusoft.wss4j.rempart.demo.services 在这里写一个类SimpleService作为服务器端
该类的内容是:
package com.neusoft.wss4j.rempart.demo.services;
public class SimpleService
{
public String echo(String arg)
{
return arg;
}
}
这个类的作用就是接收客户端的字符串,并且把该字符串返回给客户端。
这里还有个类,该类是实现UsernameToken和传送信息的安全性和完整性的核心,该类被配置在axis2.xml和service.xml中,从而能得到用户配置的axis2.xml中的信息,和服务器端配置的service.xml的 信息。每当客户端发送请求时,它都要首先通过该类获得访问服务端的权限和获得发送数据所需要的加密密码,然后把数据加密发送给服务器端,如果没有权限则不 能把数据发送到服务器端,每当服务器端想要把数据传送到客户端时,也要经过次类获得发送数据所需要的加密密码,然后把数据加密返回给客户端,客户端通过解 密获得明文信息。它的内容如下:
package com.neusoft.wss4j.rempart.demo.services;
import org.apache.ws.security.WSPasswordCallback;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.io.IOException;
public class PWCBHandler implements CallbackHandler
{
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException
{
for (int i = 0; i < callbacks.length; i++)
{
WSPasswordCallback