Java Dropwizard customAuthorizationFilter with DynamicFeature

Java Dropwizard customAuthorizationFilter with DynamicFeature,java,annotations,jersey,authorization,dropwizard,Java,Annotations,Jersey,Authorization,Dropwizard,我遵循了Pandab在下面链接中给出的所有步骤 我已将自定义注释添加到资源方法,但未调用自定义授权筛选器 谁能告诉我我错过了什么 更新:-我正在使用使用java8的dropwizard 1.0,并使用maven构建应用程序。首先检查并确认。然后请提供更多详细信息,您已经做了什么,以及您正在使用的Dropwizard版本 毕竟我不得不猜测,你已经做了什么 您是否已创建自定义授权人 public class YourCustomAuthorizer implements Authorizer&l

我遵循了Pandab在下面链接中给出的所有步骤

我已将自定义注释添加到资源方法,但未调用自定义授权筛选器

谁能告诉我我错过了什么

更新:-我正在使用使用java8的dropwizard 1.0,并使用maven构建应用程序。

首先检查并确认。然后请提供更多详细信息,您已经做了什么,以及您正在使用的Dropwizard版本


毕竟我不得不猜测,你已经做了什么

您是否已创建自定义授权人

public class YourCustomAuthorizer implements Authorizer<User> {
    @Override
    public boolean authorize(User user, String role) {
        return user.getName().equals("good-guy") && role.equals("ADMIN");
    }
}
是否在应用程序运行方法中注册了身份验证和授权类

@Override
public void run(ExampleConfiguration configuration,
                Environment environment) {
    environment.jersey().register(new AuthDynamicFeature(
            new BasicCredentialAuthFilter.Builder<User>()
                .setAuthenticator(new YourCustomAuthenticator())
                .setAuthorizer(new YourCustomAuthorizer())
                .setRealm("SUPER SECRET STUFF")
                .buildAuthFilter()));
    environment.jersey().register(RolesAllowedDynamicFeature.class);
    //If you want to use @Auth to inject a custom Principal type into your resource
    environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class));
}
我过去遇到的另一个问题是,我使用ANT和IVY而不是Maven构建应用程序。如果做得不对,这可能会导致几个问题


如果您的问题没有解决,请提供比“它不起作用,请帮助”更多的信息。*

首先检查并确认。然后请提供更多详细信息,您已经做了什么,以及您正在使用的Dropwizard版本


毕竟我不得不猜测,你已经做了什么

您是否已创建自定义授权人

public class YourCustomAuthorizer implements Authorizer<User> {
    @Override
    public boolean authorize(User user, String role) {
        return user.getName().equals("good-guy") && role.equals("ADMIN");
    }
}
是否在应用程序运行方法中注册了身份验证和授权类

@Override
public void run(ExampleConfiguration configuration,
                Environment environment) {
    environment.jersey().register(new AuthDynamicFeature(
            new BasicCredentialAuthFilter.Builder<User>()
                .setAuthenticator(new YourCustomAuthenticator())
                .setAuthorizer(new YourCustomAuthorizer())
                .setRealm("SUPER SECRET STUFF")
                .buildAuthFilter()));
    environment.jersey().register(RolesAllowedDynamicFeature.class);
    //If you want to use @Auth to inject a custom Principal type into your resource
    environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class));
}
我过去遇到的另一个问题是,我使用ANT和IVY而不是Maven构建应用程序。如果做得不对,这可能会导致几个问题



如果您的问题没有解决,请提供比“它不起作用,请帮助”更多的信息。*

在我的其他答案后编辑您的问题,我现在发布一个新的答案

正如上面所说:

当前使用@UnitOfWork注释创建事务只适用于Jersey管理的资源。如果您想在Jersey资源之外使用它,例如在验证器中,您应该使用UnitOfWorkawarProxyFactory实例化您的类


在我的另一个答案之后编辑了你的问题,我现在发布了一个新的答案

正如上面所说:

当前使用@UnitOfWork注释创建事务只适用于Jersey管理的资源。如果您想在Jersey资源之外使用它,例如在验证器中,您应该使用UnitOfWorkawarProxyFactory实例化您的类


我已经更新了我的问题。我正在使用dropwizard 1.0,使用java8,并使用maven构建我的应用程序。如果您的问题已经解决,但仍然存在其他问题,请打开新的问题线程!我已经更新了我的问题。我正在使用dropwizard 1.0,使用java8,并使用maven构建我的应用程序。如果您的问题已经解决,但仍然存在其他问题,请打开新的问题线程!如果您只是为用户读取数据库,为什么要使用工作单元,或者为什么需要事务性请求来进行用户授权查找?这对我来说没有意义,或者你是在用户被授权一次后才选择用户角色吗?对于dropwizard 9.0及以上版本中的授权,对于授权和身份验证,如果我们想访问数据库,我们需要向UnitOfWorkAwareProxyFactory注册类,并需要将UnitOfWork注释到想要访问数据库的资源类。我同意编辑问题应该是一个新问题,所以我已将其回滚。我已经要求OP提出一个新问题,所以我想知道你是否会删除这个答案?如果您愿意,您可以随时等待几天,让他们问新问题(但不幸的是,新用户通常不会麻烦)。如果您只是为用户阅读数据库,为什么要使用工作单元,或者为什么需要事务性请求来查找用户授权?这对我来说没有意义,或者你是在用户被授权一次后才选择用户角色吗?对于dropwizard 9.0及以上版本中的授权,对于授权和身份验证,如果我们想访问数据库,我们需要向UnitOfWorkAwareProxyFactory注册类,并需要将UnitOfWork注释到想要访问数据库的资源类。我同意编辑问题应该是一个新问题,所以我已将其回滚。我已经要求OP提出一个新问题,所以我想知道你是否会删除这个答案?如果您愿意,您可以随时等待几天,让他们提出新问题(但不幸的是,新用户通常不会打扰)。关于您最近的编辑,请提出新问题,否则会使下面的主要答案过时。谢谢关于你最近的编辑,请提出一个新问题,否则会使下面的主要答案过时。谢谢
SessionDao dao = new SessionDao(hibernateBundle.getSessionFactory());
ExampleAuthenticator exampleAuthenticator = new UnitOfWorkAwareProxyFactory(hibernateBundle)
               .create(ExampleAuthenticator.class, SessionDao.class, dao);