扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:闹市孤僧 2007年5月30日
关键字:
由于需要对SOAP进行前置处理,所以必须将STAX流模型的SOAP转换为DOM模型,这通过在②处指定一个DOMInHandler来完成。在③注册了一个处理SOAP报文的WSS4JInHandler,用于对接收的SOAP报文进行前置处理,与其对应的是WSS4JOutHandler,它对SOAP报文进行后置处理。两者都具有极高的定制性,可以通过配置定制各种加工逻辑,这可以通过合理设置properties属性达到各种加工处理的要求。
在④处,我们定义了一个action属性,它定义了需要处理的动作,UsernameToken表示进行用户名/密码认证的操作。其它的动作包括Encrypt、Signature、Timestamp、SamlTokenUnsigned等,可以同时设置多个动作,多个动作之间用空格分隔,如<prop key="action">Encrypt Signature</prop>。
不同的动作通过设置配套的其它属性提供相应的操作,我们通过了passwordCallbackClass属性指定一个密码回调实现类来处理UsernameToken密码查询和认证的工作。
passwordCallbackClass指定的类必须实现javax.security.auth.callback.CallbackHandler接口,其代码如下所示:
代码清单2 UtPasswordHandler
package com.baobaotao.xfire.wss4j.server;
import java.util.*
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.WSPasswordCallback;
import org.apache.ws.security.WSSecurityException;
public class UtPasswordHandler implements CallbackHandler {
private static final Map pwMockDB = new HashMap();①正确用户/密码的模拟数据
static{
pwMockDB.put("tom", "123456");
pwMockDB.put("john", "123456");
pwMockDB.put("katty", "123456");
pwMockDB.put("mike", "123456");
}
public void handle(Callback[] callbacks) throws WSSecurityException{②回调接口方法
WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];②-1:获取回调对象
String id = callback.getIdentifer();②-2:获取用户名
String validPw = (String)pwMockDB.get(id);②-3:获取用户对应的正确密码
②-4:如果是明文密码直接进行判断
if(WSConstants.PASSWORD_TEXT.equals(callback.getPasswordType())){
String pw = callback.getPassword();
if(pw == null || !pw.equalsIgnoreCase(validPw)){
throw new WSSecurityException("password not match");
}
}else{②-5:如果是密码摘要,向回调设置正确的密码(明文密码)
callback.setPassword(validPw);
}
}
}
PasswordHandle负责根据用户名查询正确的密码,这里,我们通过一个pwMockDB模拟存储用户名密码的数据库,如①所示。如果客户端以明文形式发送密码,UtPasswordHandler可以直接判断密码的正确性,如②-4所示。反之,如果以摘要的方式发送密码,UtPasswordHandler必须将正确的密码设置到callback中,以便WSS4JInHandler进行判断,如②-5所示。这里为明文和密文的密码分别提供了处理逻辑,但一般情况下,密码是以明文还是密文发送是交互双方已经约定好的。
你也可以通过扩展XFire的AbstractHandler定义自己的Handler,回调接口会传入MessageContext实例,可以通过MessageContext访问到SOAP中用户名/密码的信息进行认证。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者