Итак, проблема в том, что я разработал услуги REST на Джерси, которые работают на Glassfish. Для аутентификации я внедрил Basic-Authentication. На стороне клиента я выполнил аутентификацию через ApacheHTTPClient.Включить аутентификацию в службах REST
Моей идеей является просто попросить аутентификацию, когда зарегистрированный пользователь входит - например, Login. Это настроено в клиентском приложении (чтобы проверка подлинности была действительной до выхода пользователя) или в службы REST, где я настроил базовую аутентификацию?
Спасибо!
Это, как я делаю Вход на клиента App:
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 Переключение в какой-либо токен-носитель для заголовка пользователя/пароля auth является разумным вариантом, предложенным Atrix1987. Но, по сути, вы просите аутентифицироваться по каждому запросу, просто используя немного другой заголовок auth после первого запроса. –
И это просто дополнение к моей аутентификации HttpClient? – user2144555