使用POST调用的Dropwizard身份验证失败

时间:2017-04-15 04:02:31

标签: authentication jersey dropwizard

我在我的代码中尝试使用Dropwizard身份验证,但在运行时的POST调用中遇到了一些问题,尽管它与GET一起工作正常。这就是我在GET调用中使用它的方式:

@Override
@GET
@Path("/auth")
public Response doAuth(@Auth User user) {
    //do something
}

然后在Post call中无效:

@Override
@POST
@Path("/")
public Response createLegalEntity(@Auth User user, LegalEntity createLegalEntity) {
    // do something
}

在运行它时会抛出以下错误:

SEVERE: Missing dependency for method public javax.ws.rs.core.Response org.flipkart.api.LegalEntityResource.createLegalEntity(com.yammer.dropwizard.authenticator.User,org.flipkart.model.LegalEntity) at parameter at index 0

我是Dropwizard的新手,无法找出问题的原因。

更新

以下是我如何注册我的ldap身份验证配置:

 final LdapConfiguration ldapConfiguration = configuration.getLdapConfiguration();
    Authenticator<BasicCredentials, User> ldapAuthenticator = new CachingAuthenticator<>(
            environment.metrics(),
            new ResourceAuthenticator(new LdapAuthenticator(ldapConfiguration)),
            ldapConfiguration.getCachePolicy());

    environment.jersey().register(new AuthDynamicFeature(
            new BasicCredentialAuthFilter.Builder<User>()
                    .setAuthenticator(ldapAuthenticator)
                    .setRealm("LDAP")
                    .buildAuthFilter()));

    environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class));

1 个答案:

答案 0 :(得分:1)

最可能的原因是您尚未正确配置该身份验证功能。大多数人忘记的一件事是AuthValueFactoryProvider.Binder。此类的实例也需要注册。如果未注册,这肯定会导致您看到的错误。

// If you want to use @Auth to inject a custom Principal type into your resource

environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class));

来自Basic Authentication docs

另见:

  • My comment关于同一问题的Dropwizard问题。您将很好地解释导致问题的原因。