HTTP базовая аутентификация в Restlet с приложением JAXRS?
Я пытаюсь аутентифицировать доступ ко всем ресурсам на моем сервере с помощью HTTP Basic authentication. В настоящее время моя настройка выглядит следующим образом при запуске сервера:
this.component = new Component();
this.server = this.component.getServers().add(Protocol.HTTP, 8118);
JaxRsApplication application = new JaxRsApplication(component.getContext()
.createChildContext());
application.add(new RestletApplication());
ChallengeAuthenticator authenticator = new ChallengeAuthenticator(
this.component.getContext(),
ChallengeScheme.HTTP_BASIC, "test");
authenticator.setVerifier(new ApplicationVerifier());
this.component.getDefaultHost().attachDefault(authenticator);
this.component.getDefaultHost().attach(application);
this.component.start();
Вот мой RestletApplication
:
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
public class RestletApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(TestResource.class);
return classes;
}
}
Вот мой ApplicationVerifier
:
import java.util.HashMap;
import java.util.Map;
import org.restlet.security.LocalVerifier;
public class ApplicationVerifier extends LocalVerifier {
private Map<String, char[]> localSecrets = new HashMap<String, char[]>();
public ApplicationVerifier() {
this.localSecrets.put("username", "password".toCharArray());
}
@Override
public char[] getLocalSecret(String key) {
if (this.localSecrets.containsKey(key))
return this.localSecrets.get(key);
return null;
}
}
Наконец, вот мой TestResource
:
import java.util.*;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("test")
public class TestResource {
@GET
@Path("list")
public TestList getTestList() {
return makeTestList();
}
}
Однако при попытке доступа к ресурсу я не вижу никаких запросов или требований для аутентификации. Что я делаю не так? У меня нет никаких проблем с сортировкой и несортировкой предметов и Я уверен, что мой ресурс получает удары с запросами. Что я делаю неправильно?
1 ответ:
Согласно Явадокам для
JaxRsApplication
, Аутентификатор может быть установлен с помощью следующего кода перед запуском:((JaxRsApplication)application).setGuard((Authenticator)authenticator);
Сделайте это, и все запросы будут пролетать через ваш Аутентификатор:)