Java 为bearer auth添加招摇过市注释
我正在使用dropwizard REST服务。 我使用jwt添加了身份验证 令牌必须插入授权标头中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
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注释