Я использую Springfox 2.9.2 У меня есть API, например:
@Api(tags = "Users")
@RestController
@RequestMapping("users")
public class UsersController {
@ApiOperation(value = "Creates a user")
@ApiResponses(value = {
@ApiResponse(code = 201, message = "user created"),
@ApiResponse(code = 401, message = "not authorized")})
@PostMapping(value = "/add")
public ResponseEntity addUser(@Valid @RequestBody UserDTO userDTO) {
...
}
, чтобы сделать этот вызов, пользователю требуется авторизационный токен. Авторизация: Носитель {токен}
ведьма приходит с сервера аутентификации. я пытаюсь сделать первый вызов на этот сервер в swagger и передать его на запросы контроллера, как показано выше. Так что я делаю
@Bean
public Docket api() {
final String swaggerToken = "";
return new Docket(DocumentationType.SWAGGER_2)
@Bean
public .select()
.apis(RequestHandlerSelectors.basePackage("com.mbv.coros.notification.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiEndPointsInfo())
.securitySchemes(Arrays.asList(securityScheme()))
.securityContexts(Arrays.asList(securityContext()))
.useDefaultResponseMessages(false);
}
private SecurityScheme securityScheme() {
GrantType grantType = new ResourceOwnerPasswordCredentialsGrant(AUTH_SERVER + "/token");
SecurityScheme oauth = new OAuthBuilder().name("spring_oauth")
.grantTypes(Arrays.asList(grantType))
.scopes(Arrays.asList(scopes()))
.build();
return oauth;
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.build();
}
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope
= new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Lists.newArrayList(
new SecurityReference("JWT", authorizationScopes));
}
на Swagger, пользовательский вызов авторизации возвращает токен успешно, но не добавляет его к заголовкам запроса. Он генерирует
curl -X GET "http://localhost:8080/users/get" -H "accept: */*"
, если я устанавливаю токен как:
.securitySchemes(Arrays.asList(apiKey()))
private ApiKey apiKey() {
return new ApiKey("JWT", AUTHORIZATION_HEADER, "header");
}
, он работает отлично. есть идеи, почему это происходит?