2

私は Jersey 2 を使用して REST API を開発しています。現在、Dropwizard にある @Auth と同様の注釈を使用して基本認証を取り入れようとしています。と

@Path("hello")
public class HelloResource {
    @GET
    @Produces("application/json")
    public String hello(@Auth final Principal principal) {
        return principal.getUsername();
    }
}

hello リソースの呼び出しは、Authorization HTTP 要求ヘッダーで渡された資格情報を使用して基本認証を実行し、メソッドのプリンシパル パラメーターにプリンシパルを挿入することに成功したコードによってインターセプトされる必要があります。

@Auth リゾルバの作成を開始しました。以下を参照してください。しかし、その中から Authorization 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);
        }
    }
}

これにアプローチする方法は?:)

4

1 に答える 1

0

ああ、AbstractContainerRequestValueFactory<Principal>追加できます

@Context private ResourceContext context;

次に、提供メソッド内のそこから HTTP 要求とそのヘッダーを抽出します。

于 2013-12-14T23:50:35.423 に答える