Java Web 服务: Metro 服务下的 WS-Security
2010-02-02 00:00:00 来源:WEB开发网在 清单 2 中,所有的回调必须使用相同的类。清单 3 是回调类的代码,作用是检查每个回调请求的类型并恰当地为其赋值:
清单3. 客户端回调代码
public class UserPassCallbackHandler implements CallbackHandler
{
public void handle(Callback[] callbacks) throws UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof NameCallback) {
((NameCallback)callbacks[i]).setName("libuser");
} else if (callbacks[i] instanceof PasswordCallback) {
((PasswordCallback)callbacks[i]).setPassword("books".toCharArray());
} else {
throw new UnsupportedCallbackException(callbacks[i],
"Unsupported callback type");
}
}
}
}
您并不是必须 使用回调来设置用户名或密码。如果用户名和密码被赋予的是固定值,您可以直接在 <wssc:CallbackHandler> 元素中设置它们,方法是使用 default="yyy"(在这里,属性值即实际的用户名和密码)来替换 classname="xxx" 属性。
服务器端应用
在服务器端,WSIT 配置信息需要包含在 WSDL 服务定义中。如 “Metro 简介” 所述,服务 WSDL 的位置可以在服务 WAR 文件中的 WEB-INF/sun-jaxws.xml 里指定为一个参数。如果不使用 WSIT 特性,则 WSDL 是可选的;在这种情况下,WSDL 将在运行时自动生成。如果使用 WSIT 功能,则 WSDL 是必须的,并且必须包含为服务所用的特性配置 WSIT 所需的任意自定义扩展元素。清单 4 展示了 清单 1 WSDL 服务的策略部分,这次添加了一个 WSIT 自定义扩展元素来配置 UsernameToken 支持(以粗体显示):
更多精彩
赞助商链接