簡體   English   中英

在Jersey 2中將主體注入資源方法

[英]Injecting principal into resource method in Jersey 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();
    }
}

某些應用程序應該使用授權HTTP請求標頭中傳遞的憑據執行基本身份驗證,並成功將主體注入方法主體參數中,從而攔截hello資源調用。

我已經開始創建@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);
        }
    }
}

如何處理呢? :)

啊,在AbstractContainerRequestValueFactory<Principal>我可以添加

@Context private ResourceContext context;

然后從Provide方法中提取HTTP請求及其標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM