将参数传递给安全的 dropwizard 资源

Passing arguments to a secured dropwizard resource

我有一个资源,它是安全的,如果我删除身份验证,它似乎可以工作,但如果没有安全性,那又有什么意义呢?

这是我的代码:

@POST
@Path("/secured")
@Timed
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@UnitOfWork
@RolesAllowed("mainUser")
public Response aliveSecure(@Auth User user, CustomRequest test)
{
    CustomResponse resp = new CustomResponse();

    System.out.println(test.getMessage());
    return Response.status(Response.Status.ACCEPTED).entity(resp).build();
}

CustomRequest 和 CustomResponse 类型是非常标准的 POJO,它们只包含一个名为 "Message" 的字符串 - 它们实际上是相同的,但这只是我为了学习 DropWizard 而尝试完成的练习。

现在,如果我删除这里的 @Auth 和 @RolesAllowed 等 - 使其变得不安全,那么该方法将正常执行 - 但实际上,这是我在尝试启动时遇到的错误申请。

org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
! [[FATAL] No injection source found for a parameter of type public CustomRequest at index 0.;

auth manual 读得清楚 -

If you want to use @Auth to inject a custom principal type into your resource.

因此,您应确保将以下内容添加到扩展 io.dropwizard.Application

Service
@Override
public void run(SomeConfigThatExtendsConfiguration config, Environment environment) throws Exception {
    ....
    environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class));
}