加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为bearer auth添加一个swagger注释

发布时间:2020-12-15 01:05:30 所属栏目:Java 来源:网络整理
导读:我正在开发一个dropwizard REST服务. 我使用https://bitbucket.org/b_c/jose4j/wiki/Home为jwt添加了身份验证 令牌必须进入Authorization标头 Authorization: Bearer [TOKEN] 我想找到一个很好的方法来添加一些swagger注释,以便在swagger-ui上拥有授权标头.

我正在开发一个dropwizard REST服务.
我使用https://bitbucket.org/b_c/jose4j/wiki/Home为jwt添加了身份验证

令牌必须进入Authorization标头

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用于Principal用户,我会得到运行时间:

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

有没有更好的方法呢?

最佳答案
如果添加一个swaggerdefinition

@SwaggerDefinition(
  securityDefinition = @SecurityDefinition(
    apiKeyAuthDefinitions = {
      @ApiKeyAuthDefinition(key = "user",name = "Authorization",in = ApiKeyLocation.HEADER)
    }
  )
)

然后,您将可以访问swagger ui的“授权”功能.将“Bearer XXX ….”字符串添加为API密钥应该会导致调用端点,并按照您希望的方式设置Authorize标头,并将用户字段设置为其值.

警告:我还没有看到这个端到端的工作,因为我遇到了令牌本身的问题,但似乎我得到了正确的事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读