大家好,我正在阅读有关使用 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?(配置传输级安全性)
这是应该怎么做还是我错过了什么?
对于更多背景知识,我有一个 Web 服务(jax-ws),它具有使用 JPA 作为数据库管理器/持久化器来查询 db 等的方法。我的客户端将与 Swing UI 交互并连接到 Web 服务。