문제는 다음과 같습니다. 저지에서 Glassfish에서 실행되는 REST 서비스를 개발했습니다. 인증을 위해 기본 인증을 구현했습니다. 클라이언트 측에서는 ApacheHTTPClient을 통해 인증을 구현했습니다.REST 서비스에서 인증 사용 유지
제 아이디어는 등록 된 사용자가 로그인 할 때 인증을 요청하는 것입니다. 클라이언트 응용 프로그램 (사용자가 로그 아웃 할 때까지 인증을 유효하게 유지하기 위해) 또는 기본 인증을 구성한 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에 반환 내가 클라이언트 응용 프로그램에 로그인을하고 있어요 방법이있다
.
하지만, 처음으로 시스템에 들어가면 사용자 인증을 요청하고 싶습니다. 그는 기록한 후에 REST 서비스를 사용할 수 있습니다. 그리고 나는 그가 소비하는 각 서비스에서 인증을 요구하고 싶지 않습니다. 나는 바로 생각하니? – user2144555
@ user2144555 Atrix1987에서 제안한대로 사용자/비밀번호 인증 헤더에 대한 어떤 종류의 베어러 토큰을 스와핑하는 것이 합당한 옵션입니다. 그러나 사실상 모든 요청에 대해 인증을 요청합니다. 첫 번째 요청 이후 약간 다른 인증 헤더를 사용합니다. –
그리고 그것은 단지 HttpClient 인증에 대한 보완책입니까? – user2144555