Базовая аутентификация HTTP в рестлете с приложением JAXRS? - PullRequest
3 голосов
/ 04 мая 2011

Я пытаюсь аутентифицировать доступ ко всем ресурсам на моем сервере через HTTP Basic аутентификацию. В настоящее время мои настройки выглядят так при запуске сервера:

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 Ответ

3 голосов
/ 04 мая 2011

Согласно JavaDocs для JaxRsApplication, аутентификатор может быть установлен с использованием следующего кода перед запуском:

((JaxRsApplication)application).setGuard((Authenticator)authenticator);

Сделайте это, и все запросы будут проходить через ваш аутентификатор:)

...