编写服务器端代码
首先简单介绍Wss4j实现WS-Security功能,很简单就是客户端发送一个字符串,服务器端得到该字符串,同时把字符串在发送给客户端,首先自己建立一个web应用工程。
在src下建一个包com.test.wss4j.rempart.demo.services 在这里写一个类SimpleService作为服务器端
该类的内容是:
package com.test.wss4j.demo;
public class SimpleService
{
public String
echo(String arg)
{
return arg;
}
}
这个类的作用就是接收客户端的字符串,并且把该字符串返回给客户端。
这里还有个类,该类是实现UsernameToken和传送信息的安全性和完整性的核心,该类被配置在axis2.xml和service.xml中,从而能得到用户配置的axis2.xml中的信息,和服务器端配置的service.xml的信息。每当客户端发送请求时,它都要首先通过该类获得访问服务端的权限和获得发送数据所需要的加密密码,然后把数据加密发送给服务器端,如果没有权限则不能把数据发送到服务器端。每当服务器端想要把数据传送到客户端时,也要经过此类获得发送数据所需要的加密密码,然后把数据加密返回给客户端,客户端通过解密获得明文信息。
它的内容如下:
package com.test.wss4j.demo;
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 pwcb =
(WSPasswordCallback)callbacks[i];
String id =
pwcb.getIdentifer();
if("client".equals(id))
{
pwcb.setPassword("apache");
}
else
if("service".equals(id))
{
pwcb.setPassword("apache");
}
else
{
throw new
UnsupportedCallbackException(callbacks[i], "对不起,您不是授权用户,不能访问该WEB服务!");
}
}
}
}
编写服务器端的描述文件services.xml
然后写一个解析该服务器类services.xml文件。该文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<service name="wsc">
<operation name="echo">
<messageReceiver
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</operation>
<parameter name="ServiceClass" locked="false">
com.neusoft.wss4j.rempart.demo.services.SimpleService
</parameter>
<module ref="rampart" />
<parameter
name="InflowSecurity">
<action>
<items>Timestamp
Signature</items>
<signaturePropFile>
keys/service.properties
</signaturePropFile>
</action>
</parameter>
<parameter
name="OutflowSecurity">
<action>
<items>Timestamp
Signature</items>
<user>service</user>
<passwordCallbackClass>
com.neusoft.wss4j.demo.PWCBHandler
</passwordCallbackClass>
<signaturePropFile>
keys/service.properties
</signaturePropFile>
<signatureKeyIdentifier>
DirectReference
</signatureKeyIdentifier>
</action>
</parameter>
</service>
服务器wsc中有几个方法就需要配置几个<operation></operation>
echo为wsc服务器类中的方法。wsc为服务的名字也就是后边的打包服务器端wsc.aar的名字。着重看下红色和粉色字体部分,红色这部分是客户端传来信息用数字签名来解密客户端传过来的加密信息本例通过keys文件夹下的service.properties这个文件找到service.jks对信息进行解密,粉色部分是服务器端把输出向客户端的信息加密用的,本例通过keys文件夹下的service.properties这个文件找到service.jks对信息加密的。
service.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=apache
org.apache.ws.security.crypto.merlin.file=keys/service.jks
相关推荐
内含: ISNetworksProvider.jar tsik.jar ws-security.jar 和wss4j的所有包
CXF使用WSS4J实现WS-Security规范,本例的配置是Timestamp Signature Encrypt,具体使用可以参考我的博客http://blog.csdn.net/wangchsh2008/article/details/6708270
纯java调用ws-security+CXF实现的webservice安全接口
ws-security 的三个jar包 和wss4j的所有jar包
CXF WS-Security WSS4J 例子 可以运行,运行的时候只要运行client就行,重点是运行完之后要关掉第一个控制台,才能看到结果。一定要记得改一下client的路径名
它们每个都包含带有自己端点的WSS4J和XWSS变体。 要找出每个端点部署的URI,请查看下面的相同自述文件或文档页面。 还有一个客户端,准备了一些上下文文件以对其进行设置以调用任何端点。 包括几个
用于实现WS-Security的实现包,在Apache网站也可以下载
Java 的类库用来对 SOAP 消息进行签名和校验,使用 Apache Axis 和 Apache XML-Security 项目。
android client ksoap2 token apache cxf wss4j authentication
wss4j-1.5.1.jar wss4j-1.5.1.jar
XFire中实现WS-Security完整编 Spring+xFire+wss4j配置Helloworld实例 完整说明文档 Myeclipse项目 服务端工程 客户端工程
wss4j 1.5 jar wss4j-1.5 wss4j-1.5.jar
wss4j-1.5.2.jar wss4j-1.5.2.jar
wss4j-1.6.4.jar
wss4j安全认证jar,给webservice使用的。
xml-security是xml安全实现的包,WSS4J依赖这个包
在官网找到的wss4j用到的jar包。亲测可用的。
具有WSS4J安全性的SOAP Web服务项目,还创建了一个客户端以使用它 - Spring boot 2.0.1.RELEASE - Java 1.8 - jaxb2 - Security - WSS4J 定义xs:WS模式 src /主/资源/ beer.xsd 必要的java类由maven插件自行生成...
自制CHM版的API文档,带索引。 注:如果各位下载后打开或无法显示页面,请在CHM文件右键—属性—解除锁定即可。
Spring集成CXF实例(包含WSS4J安全认证)