gpt4 book ai didi

java - 使用 JAX-WS 进行客户端应用程序身份验证

转载 作者:行者123 更新时间:2023-12-01 14:18:52 25 4
gpt4 key购买 nike

大家好,我正在阅读 Application Authentication with JAX-WS 的教程,简而言之,它可以归结为:

@Override
public String getHelloWorldAsString() {

MessageContext mctx = wsctx.getMessageContext();

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

String username = "";
String password = "";

if(userList!=null){
//get username
username = userList.get(0).toString();
}

if(passList!=null){
//get password
password = passList.get(0).toString();
}

//Should validate username and password with database
if (username.equals("mkyong") && password.equals("password")){
return "Hello World JAX-WS - Valid User!";
}else{
return "Unknown User!";
}

}

正如您所看到的,该方法检查身份验证并根据具体情况返回结果,但这意味着我的所有 Web 服务方法都需要检查身份验证。

所以基本上我想知道如何使授权只发生一次? (当客户端登录时)。

我有一些简单的想法:

1) 使 Web 服务仅允许单个 login() 方法,该方法将在登录错误或另一个类的对象实例具有错误时返回 null所有其他方法(即构成 Web 服务的功能),因此除非通过身份验证,否则客户端将无法访问 Web 服务方法。

2) 我看到的另一种方法可能是单向客户端 SSL? (Configuring Transport-Level Security)

这是应该如何完成的,还是我遗漏了什么?

对于更多背景知识,我有一个 Web 服务(jax-ws),它具有使用 JPA 作为数据库管理器/持久化器来查询数据库等的方法。我的客户端将与 Swing UI 交互并连接到 Web 服务。

最佳答案

每次 Web 服务调用都需要进行某种类型的身份验证,无论是通过用户名和密码、证书还是某种类型的 token (之前通过调用“登录”操作发出)。

如果您真正想要做的只是从 Web 服务中获取身份验证代码,那么最简单(且更安全)的解决方案通常是让 J2EE 容器通过 SSL/TLS 和基本身份验证(以及您的客户在每次调用时都会发送用户名和密码,如您的选项#2)。

开始配置此安全性 see this tutorial.

其中具体要查看的内容是 <auth-method>BASIC</auth-method> , <transport-guarantee>CONFIDENTIAL</transport-guarantee><web-resource-collection>配置。

关于java - 使用 JAX-WS 进行客户端应用程序身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17828037/

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