Я разрабатываю API REST с помощью Jersey 2, и в настоящий момент я пытаюсь включить базовую аутентификацию с помощью аннотации, аналогичной @Auth, найденной в Dropwizard. СВведение в метод ресурсов в Джерси 2
@Path("hello")
public class HelloResource {
@GET
@Produces("application/json")
public String hello(@Auth final Principal principal) {
return principal.getUsername();
}
}
вводное ресурс вызов должен быть перехвачен некоторый код, выполняющего основную аутентификацию, используя учетные данные, передаваемые в заголовке запроса авторизации HTTP и на успех инъекционного принципала в метод основного параметра.
Я начал создавать резольвер @Auth, см. Ниже, но я не вижу, как я могу получить доступ к заголовку HTTP-запроса авторизации из этого?
@Singleton
public class AuthResolver {
public static class AuthInjectionResolver extends ParamInjectionResolver<Auth> {
public AuthInjectionResolver() {
super(AuthValueFactoryProvider.class);
}
}
@Singleton
public static class AuthValueFactoryProvider extends AbstractValueFactoryProvider {
@Inject
public AuthValueFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider, final ServiceLocator injector) {
super(extractorProvider, injector, UNKNOWN);
}
@Override
protected Factory<?> createValueFactory(final Parameter parameter) {
final Class<?> classType = parameter.getRawType();
return classType == null || !classType.equals(Principal.class) ? null :
new AbstractContainerRequestValueFactory<Principal>() {
@Override
public Principal provide() {
// Authentication?
}
};
}
}
public static class Binder extends AbstractBinder {
@Override
protected void configure() {
bind(AuthValueFactoryProvider.class).to(ValueFactoryProvider.class).in(Singleton.class);
bind(AuthInjectionResolver.class).to(
new TypeLiteral<InjectionResolver<Auth>>() {
}
).in(Singleton.class);
}
}
}
Как подойти к этому? :)