2016-04-03 5 views
3

Я работаю над сервисом REST-сервиса dropwizard. я добавил проверку подлинности с JWT с использованием https://bitbucket.org/b_c/jose4j/wiki/HomeДобавить аннотацию swagger для удостоверения на предъявителя

Маркер должен быть в заголовке Authorization

Authorization: Bearer [TOKEN] 

Я хотел бы найти хороший способ, чтобы добавить некоторые чванство аннотаций иметь заголовок авторизации на чванство-щ.

Я нашел работу вокруг, скрывая параметры аутентификации и добавление фиктивных параметров с @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 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) 
    } 
) 
) 

вы затем получить доступ к функции «авторизовать» в развязность ш. Добавление строки «Bearer XXX ....» в качестве ключа API должно привести к тому, что конечная точка будет вызвана с заголовком Authorize, как вы хотите, и пользовательское поле установит его значение.

Предупреждение: Я не видел эту работу от конца до конца, потому что у меня возникают проблемы с самим токеном, но кажется, что я получаю правильные вещи.

+1

Если у вас есть несколько файлов ресурсов, где я должен предоставить эту аннотацию @SwaggerDefinition –

Смежные вопросы