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

时间:2017-09-26 04:35:36

标签: java rest jackson jersey-2.0 dropwizard

我有一个安全的资源,如果我删除了身份验证,它似乎工作,但是没有安全性,那么重点是什么?

这是我的代码:

@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.;

1 个答案:

答案 0 :(得分:0)

auth manual读得很清楚 -

  

如果您想使用@Auth将自定义主体类型注入您的   资源。

因此,您应确保在Service扩展io.dropwizard.Application

@Override public void run(SomeConfigThatExtendsConfiguration config, Environment environment) throws Exception { .... environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class)); } 中添加以下内容
var html = HtmlService.createHtmlOutputFromFile('inputpage').setSandboxMode(HtmlService.SandboxMode.IFRAME).addMetaTag('viewport', 'width=device-width, initial-scale=1');