gpt4 book ai didi

java - JAX-WS 和 BASIC 身份验证,当用户名和密码在数据库中时

转载 作者:IT老高 更新时间:2023-10-28 20:39:42 26 4
gpt4 key购买 nike

我是 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 上运行.

非常感谢任何有关使用数据库密码验证用户身份的帮助,谢谢。

最佳答案

我认为您正在寻找应用程序级别的 JAX-WS 身份验证,而不是服务器级别的 HTTP basic。请参阅以下完整示例:

Application Authentication with JAX-WS

在 Web 服务客户端站点上,只需将您的“用户名”和“密码”放入请求 header 中即可。

Map<String, Object> req_ctx = ((BindingProvider)port).getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);

Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Username", Collections.singletonList("someUser"));
headers.put("Password", Collections.singletonList("somePass"));
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);

在Web服务服务器站点,通过WebServiceContext获取请求头参数。

@Resource
WebServiceContext wsctx;

@WebMethod
public String method() {
MessageContext mctx = wsctx.getMessageContext();

Map http_headers = (Map) mctx.get(MessageContext.HTTP_REQUEST_HEADERS);
List userList = (List) http_headers.get("Username");
List passList = (List) http_headers.get("Password");
//...

关于java - JAX-WS 和 BASIC 身份验证,当用户名和密码在数据库中时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1613212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com