【问题标题】:Injecting principal into resource method in Jersey 2在 Jersey 2 中将本金注入资源方法
【发布时间】:2014-01-02 13:34:35
【问题描述】:

我正在使用 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);
        }
    }
}

如何解决这个问题? :)

【问题讨论】:

    标签: java annotations jersey inject hk2


    【解决方案1】:

    啊,在AbstractContainerRequestValueFactory&lt;Principal&gt;我可以加

    @Context private ResourceContext context;
    

    然后从提供方法中提取 HTTP 请求及其标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2014-06-27
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      相关资源
      最近更新 更多