Java 为bearer auth添加招摇过市注释

Java 为bearer auth添加招摇过市注释,java,swagger,jwt,dropwizard,swagger-ui,Java,Swagger,Jwt,Dropwizard,Swagger Ui,我正在使用dropwizard REST服务。 我使用jwt添加了身份验证 令牌必须插入授权标头中 Authorization: Bearer [TOKEN] 我想找到一个好方法来添加一些swagger注释,以便在swagger ui上具有授权头 我找到了一个解决方法,隐藏身份验证参数并使用@HeaderParam @POST @Path("/test/") public Foo postBar( @Auth @ApiParam(hidden = true) Principal

我正在使用dropwizard REST服务。 我使用jwt添加了身份验证

令牌必须插入授权标头中

Authorization: Bearer [TOKEN]
我想找到一个好方法来添加一些swagger注释,以便在swagger ui上具有授权头

我找到了一个解决方法,隐藏身份验证参数并使用
@HeaderParam

@POST
@Path("/test/")
public Foo postBar(
        @Auth @ApiParam(hidden = true) Principal user,
        @ApiParam("data") Foo bar,
        @HeaderParam(value="Authorization")String dummy)
这将添加到参数中:

{
  "name" : "Authorization",
  "in" : "header",
  "required" : false,
  "type" : "string"
} 
如果我将
@HeadParam
放在
主要用户的
上,我将进入运行时:

Caused by: 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 java.util.Map com.foo.bar.AppResource.get(java.security.Principal) at index 0.; source='ResourceMethod{httpMethod=GET, consumedTypes=[], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.mykronoz.data.tracking.resources.AppResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@6374d682]}, definitionMethod=public java.util.Map com.foo.bar.AppResource.get(java.security.Principal), parameters=[Parameter [type=interface java.security.Principal, source=Authorization, defaultValue=null]], responseType=java.util.Map<java.lang.String, java.lang.Object>}, nameBindings=[]}']
原因:org.glassfish.jersey.server.model.ModelValidationException:应用程序资源模型的验证在应用程序初始化期间失败。
[[FATAL]在索引0处找不到类型为public java.util.Map com.foo.bar.AppResource.get(java.security.Principal)的参数的注入源;[source='ResourceMethod{httpMethod=get,consumedTypes=[],producedTypes=[application/json],suspendTimeout=0,suspendTimeoutUnit=毫秒,invocable=invocable=invocable{handler=ClassBasedMethodHandler{handlerClass=class com.mykronoz.data.tracking.resources.AppResource,handlerConstructors=[org.glassfish.jersey.server.model。HandlerConstructor@6374d682]},definitionMethod=public java.util.Map com.foo.bar.AppResource.get(java.security.Principal),parameters=[Parameter][type=interface java.security.Principal,source=Authorization,defaultValue=null]],responseType=java.util.Map},nameBindings=[]}']

有更好的方法吗?

如果你添加了一个招摇过市的定义

@SwaggerDefinition(
securityDefinition=@securityDefinition(
apiKeyAuthDefinitions={
@ApiKeyAuthDefinition(key=“user”,name=“Authorization”,in=ApiKeyLocation.HEADER)
}
)
)
然后,您将可以访问swagger ui的“Authorize”功能。将“Bearer XXX…”字符串添加为API密钥后,应使用您想要的方式设置Authorize标头并将用户字段设置为其值来调用端点


警告:我还没有看到这个端到端的工作,因为我对令牌本身有问题,但我似乎得到了正确的传递。

如果您有多个资源文件,我必须在哪里给出这个@SwaggerDefinition注释