我对JAX-WS不熟悉,有一件事我不理解。
有很多教程可以用来设置JAX-WS安全性,但在几乎所有情况下,BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY都存储在某个.xml文件中(取决于容器),它们是“硬编码”的。这就是我不明白的地方。如何通过将BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY与数据库中的用户名和密码进行比较来验证Web服务客户端?我尝试在客户端上像这样设置BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY:
ShopingCartService scs = new ShopingCartService(wsdlURL, name);
ShopingCart sc = scs.getShopingCartPort();
Map<String, Object> requestContext = ((BindingProvider)sc).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, userName);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
sc.someFunctionCall();
然后,在服务器端像这样检索:
@Resource
WebServiceContext wsContext;
@WebMethod
public void someFunctionCall() {
MessageContext mc = wsContext.getMessageContext();
mc.get(BindingProvider.USERNAME_PROPERTY);
mc.get(BindingProvider.PASSWORD_PROPERTY);
}
但是我总是得到null,我在xml中没有设置任何东西,web服务工作得非常好,只是我无法获取那些变量 :(
我正在运行java 1.6、tomcat 6和JAX-WS。
非常感谢任何有关使用数据库中的密码对用户进行身份验证的帮助, 谢谢。