2016-04-03 44 views
3

我正在使用dropwizard REST服務。 我已經加入身份驗證使用https://bitbucket.org/b_c/jose4j/wiki/Home添加承載驗證的招搖註釋

令牌有一個智威湯遜要到Authorization頭

Authorization: Bearer [TOKEN] 

我想找到好辦法增添一些招搖註解,對授權頭招搖的UI。

我已經找到了解決辦法,躲在認證PARAM和添加僞PARAM與@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" 
} 

如果我把@HeadParamPrincipal user我得到運行時間:

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=[[email protected]]}, 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=[]}'] 

有沒有更好的方法來做到這一點?

回答

1

如果添加swaggerdefinition

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

,那麼你將獲得訪問招搖UI的「授權」功能。將您的「Bearer XXX ....」字符串添加爲API密鑰,然後應該按照您希望的方式設置Authorize標頭並將用戶字段設置爲其值,從而調用端點。

警告:我還沒有看到這個工作端到端,但因爲我有令牌本身的問題,但似乎我得到正確的東西通過。

+1

如果你有幾個資源文件,我必須在哪裏給這個@SwaggerDefinition註解 –