-
首先来段百度百科
-
WSS4J
WSS4J实现了WS-Security,是AXIS的安全模块,但也可以用于其他Web Services框架(例如XFIRE,CXF)。
WSS4J在Web Services框架中以handler方式工作,在发送SOAP消息前进行签名、加入认证凭据和加密,在收到SOAP消息后进行解密、认证和验证签名等安全工作。使用者可以自己编写handler处理SOAP消息以保证安全。
前段时间在编写cxf rest的时候需要用到一个加密框架,于是用到的WSS4j ,关于wss4j的资料相对于其他比较少,
前段时间在编写cxf rest的时候需要用到一个加密框架,于是用到的WSS4j ,关于wss4j的资料相对于其他比较少,
关于对加密无非是两件事情:
- 认证 WS 请求
- 加密 SOAP 消息
1. 基于用户令牌的身份认证
1,首先,当然是导入包
添加 CXF 提供的 WS-Security 的 Maven 依赖
2,在cxf.xml中配置
<bean id="wss4jInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<!-- 用户认证(明文密码) -->
<entry key="action" value="UsernameToken"/>
<entry key="passwordType" value="PasswordText"/>
<entry key="passwordCallbackRef" value-ref="serverPasswordCallback"/>
</map>
</constructor-arg>
</bean>
WSS4JInInterceptor 是一个 InInterceptor,表示对输入的消息进行拦截,同样还有 OutInterceptor,表示对输出的消息进行拦截
- action = UsernameToken:表示使用基于“用户名令牌”的方式进行身份认证
- passwordType = PasswordText:表示密码以明文方式出现
- passwordCallbackRef = serverPasswordCallback:需要提供一个用于密码验证的回调处理器
@Component
public class ServerPasswordCallback implements CallbackHandler {
private static final Map<String, String> userMap = new HashMap<String, String>();
static {
userMap.put("client", "clientpass");
userMap.put("server", "serverpass");
}
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];
String clientUsername = callback.getIdentifier();
String serverPassword = userMap.get(clientUsername);
if (serverPassword != null) {
callback.setPassword(serverPassword);
}
}
}
下一步在去完成配置