【发布时间】:2023-03-15 22:36:01
【问题描述】:
我是 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);
}
但我总是得到空值,我没有在 xml 中设置任何东西,Web 服务工作得很好,除了我无法获取这些变量:(
我同时在 java 1.6、tomcat 6 和 JAX-WS 上运行。
非常感谢任何有关使用数据库密码验证用户身份的帮助, 谢谢。
【问题讨论】:
-
我也尝试在 SOAPHandler 中检查 BindingProvider.USERNAME_PROPERTY,仍然为空。
标签: java jax-ws tomcat6 basic-authentication