gpt4 book ai didi

java - 在 REST 服务中保持身份验证启用

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

所以问题是:我在 Jersey 开发了在 Glassfish 上运行的 REST 服务。对于身份验证,我实现了基本身份验证。在客户端,我通过 ApacheHTTPClient 实现了身份验证。

我的想法只是在注册用户输入时要求进行身份验证 - 就像登录一样。是在客户端应用程序中配置的(以保持身份验证有效,直到用户注销),还是在我配置基本身份验证的 REST 服务中配置?

谢谢!

<小时/>

这就是我在客户端应用程序上登录的方式:

import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.util.EntityUtils;

public class UserLogin {

private static final String BASE_URI = "http://localhost:8080/LULServices/webresources";

public static void main(String[] args) throws Exception {

final DefaultHttpClient httpclient = new DefaultHttpClient();

try {
httpclient.getCredentialsProvider().setCredentials(
new AuthScope("localhost", 8080),
new UsernamePasswordCredentials("zzzzz", "xxxxx"));

HttpPut httpPut = new HttpPut(BASE_URI + "/services.users/login");
HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 10000);

httpPut.addHeader("Content-type", "multipart/form-data");

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("login", "zzzzz"));
nameValuePairs.add(new BasicNameValuePair("password","xxxxx"));

httpPut.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httpPut);

try {
System.out.println("Executing request " + httpPut.getRequestLine());
HttpEntity entity = response.getEntity();

System.out.println("----------------------------------------");
System.out.println("HTTP Status: " + response.getStatusLine());

String putResponse = EntityUtils.toString(entity);
System.out.println(putResponse);
EntityUtils.consume(entity);

} finally
httpPut.releaseConnection();

} finally
httpclient.getConnectionManager().shutdown();
}
}

它返回给用户他的secret_id。

最佳答案

正如Darrel Miller所述,基于REST的服务应该是无状态的。但为了帮助您解决当前问题,我建议使用 auth token 和刷新策略。

描述:每次成功验证后,您的服务器可以返回一个唯一 27[您想要的任何长度]数字字符串。该 token 可能有也可能没有过期政策[取决于您想要的]。因此,对于后续身份验证[当客户端应用程序具有身份验证 token 时],您实际上可以提供一个新的身份验证 token 并使前一个身份验证 token 无效。

此外,对于每个其他 API 调用,您可以发送此身份验证 token 来验证请求是否来自经过身份验证的来源。现在,当用户注销应用程序时,您可以简单地从客户端删除身份验证 token 。

下次当用户返回应用程序时,应用程序将没有身份验证 token ,并且可以重定向到登录屏幕。

关于java - 在 REST 服务中保持身份验证启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15620701/

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