如何注入自定义主体?

时间:2019-07-06 07:01:18

标签: java authentication guice dropwizard okta

我正在使用Java 8,Dropwizard,Guice和Okta。自定义主体的注入应该如何发生?从Application.initialized调用以下代码时有效,但我正在寻找Guice方式:

// Bind our custom principal to the @Auth annotation
environment.jersey().register(
    new AuthValueFactoryProvider.Binder<>(AccessTokenPrincipal.class));

我尝试了此模块,然后将其捆绑在应用程序中,但没有运气:

public class AuthModule extends AbstractModule {
  @Override
  protected void configure() {
  }

  @Provides
  public AuthValueFactoryProvider.Binder<AccessTokenPrincipal> providesPrincipalBinder() {
    return new AuthValueFactoryProvider.Binder<>(AccessTokenPrincipal.class);
  }
}

1 个答案:

答案 0 :(得分:0)

签出@Provides的文档:“方法的返回类型绑定到其返回值”。因此,您应该提供AccessTokenPrincipal本身,而不是提供活页夹*

*如果具有@Inject注释的AccessTokenPrincipal构造函数,这将由Guice自动完成。 ATP构造函数还必须考虑其所有依赖性。

[EDIT]我只是通过AuthValueFactoryProvider查看的。这些看起来很臭,但是您可能需要做的就是创建活页夹(就像您在上面所做的那样)。然后使用#getProvider,然后使用bind(ATP.class).toProvider(new<>AVFP(...).Binder<>(ATP).getProvider())

在模块的配置中安装该提供程序