无法使用Springfox 2.9.2从Swagger-UI发送授权令牌。

huangapple 未分类评论52阅读模式
英文:

Cannot send Authorization token from Swagger-UI using Springfox 2.9.2

问题

在Swagger UI中,我想要将授权令牌添加到请求头中。

我几乎查看了这里和其他网站上的每篇帖子。仍然无法按预期工作。我尝试了不同的解决方案,但没有任何改变。

根据这个官方Spring问题,我目前的实现如下:

XController.java:

@ApiOperation(
            value = "Yeni Üye Tanımlama Servisi",
            notes = "Platformlar tarafından iletilen üye bilgilerinin kaydedilmesini sağlayan servistir.",
            response = KfsResponse.class
            , authorizations = { @Authorization(value="Authorization") })

SwaggerConfig.java:

@Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(Predicates.or(RequestHandlerSelectors.basePackage("tr.com.mkk.kfs.kfs.web"), RequestHandlerSelectors.basePackage("tr.com.mkk.kfs.kfs.model.infos")))
                .paths(PathSelectors.any()).build()
                .apiInfo(apiEndPointsInfo())
                .securitySchemes(Arrays.asList(apiKey()))
                .securityContexts(Arrays.asList(securityContext));

    }

    private ApiKey apiKey() {
        return new ApiKey("Authorization", "Authorization", "header");
    }

    SecurityReference securityReference = SecurityReference.builder()
            .reference("Authorization")
            .scopes(new AuthorizationScope[0])
            .build();

    SecurityContext securityContext = SecurityContext.builder()
            .securityReferences(Arrays.asList(securityReference))
            .build();

pom.xml:

<springfox.version>2.9.2</springfox.version>

<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-bean-validators</artifactId>
            <version>${springfox.version}</version>
        </dependency>

结果始终相同:

无法使用Springfox 2.9.2从Swagger-UI发送授权令牌。
无法使用Springfox 2.9.2从Swagger-UI发送授权令牌。

一些被指出可行的解决方案,我尝试过:

https://github.com/springfox/springfox/issues/2661,
https://github.com/springfox/springfox/issues/2194,
https://stackoverflow.com/a/58720077/7831244,
https://stackoverflow.com/a/52868853/7831244

英文:

In swagger-ui, I want to add authorization token to request header.

I almost looked at every post in here and other sites. Still cannot make it work as expected. I tried different solutions but nothing changed.

My current implementation according to this offical spring issue:

XController.java:

@ApiOperation(
            value = &quot;Yeni &#220;ye Tanımlama Servisi&quot;,
            notes = &quot;Platformlar tarafından iletilen &#252;ye bilgilerinin kaydedilmesini sağlayan servistir.&quot;,
            response = KfsResponse.class
            , authorizations = { @Authorization(value=&quot;Authorization&quot;) })

SwaggerConfig.java:

 @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(Predicates.or(RequestHandlerSelectors.basePackage(&quot;tr.com.mkk.kfs.kfs.web&quot;), RequestHandlerSelectors.basePackage(&quot;tr.com.mkk.kfs.kfs.model.infos&quot;)))
                .paths(PathSelectors.any()).build()
                .apiInfo(apiEndPointsInfo())
                .securitySchemes(Arrays.asList(apiKey()))
                .securityContexts(Arrays.asList(securityContext));

    }

    private ApiKey apiKey() {
        return new ApiKey(&quot;Authorization&quot;, &quot;Authorization&quot;, &quot;header&quot;);
    }

    SecurityReference securityReference = SecurityReference.builder()
            .reference(&quot;Authorization&quot;)
            .scopes(new AuthorizationScope[0])
            .build();

    SecurityContext securityContext = SecurityContext.builder()
            .securityReferences(Arrays.asList(securityReference))
            .build();

pom.xml:

&lt;springfox.version&gt;2.9.2&lt;/springfox.version&gt;

&lt;dependency&gt;
            &lt;groupId&gt;io.springfox&lt;/groupId&gt;
            &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt;
            &lt;version&gt;${springfox.version}&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;io.springfox&lt;/groupId&gt;
            &lt;artifactId&gt;springfox-swagger-ui&lt;/artifactId&gt;
            &lt;version&gt;${springfox.version}&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;io.springfox&lt;/groupId&gt;
            &lt;artifactId&gt;springfox-bean-validators&lt;/artifactId&gt;
            &lt;version&gt;${springfox.version}&lt;/version&gt;
        &lt;/dependency&gt;

Result is always the same:

无法使用Springfox 2.9.2从Swagger-UI发送授权令牌。
无法使用Springfox 2.9.2从Swagger-UI发送授权令牌。

some solutions, has been pointed out working, I tried:

https://github.com/springfox/springfox/issues/2661,
https://github.com/springfox/springfox/issues/2194,
https://stackoverflow.com/a/58720077/7831244,
https://stackoverflow.com/a/52868853/7831244.

答案1

得分: 0

你可以使用以下示例中的 ParameterBuilderAuthorization 头设置为 docket

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

	@Value("${title:title}")
	private String title;
	@Value("${description:description}")
	private String description;
	@Value("${version:0.0.1}")
	private String version;

	ApiInfo apiInfo() {
		return new ApiInfoBuilder().title(title).description(description).version(version).build();
	}

	@Bean
	public Docket api() {

		Docket docket;

		docket = new Docket(DocumentationType.SWAGGER_2).select()
			.apis(RequestHandlerSelectors.basePackage("com.controller")).paths(PathSelectors.any()).build()
			.apiInfo(apiInfo());

		docket.globalOperationParameters(
			Arrays.asList(
				new ParameterBuilder().name("Authorization")
					.description("Authorization details for security (JWT token or BasicAuth)")
					.modelRef(new ModelRef("String")).parameterType("header").required(false).build()));

		return docket;
	}
}
英文:

You can set Authorization header to docket using ParameterBuilder as shown below

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

	@Value(&quot;${title:title}&quot;)
	private String title;
	@Value(&quot;${description:description&quot;)
	private String description;
	@Value(&quot;${version:0.0.1}&quot;)
	private String version;

	ApiInfo apiInfo() {
		return new ApiInfoBuilder().title(title).description(description).version(version).build();
	}

	@Bean
public Docket api() {

        Docket docket;

        docket = new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors.basePackage(&quot;com.controller&quot;)).paths(PathSelectors.any()).build()
                .apiInfo(apiInfo());


        docket.globalOperationParameters(
				Arrays.asList(
				new ParameterBuilder().name(&quot;Authorization&quot;)
						.description(&quot;Authorization details for security (JWT token or BasicAuth)&quot;)
						.modelRef(new ModelRef(&quot;String&quot;)).parameterType(&quot;header&quot;).required(false).build()));  

        return docket;
    }
}

huangapple
  • 本文由 发表于 2020年5月5日 16:20:21
  • 转载请务必保留本文链接:https://java.coder-hub.com/61608742.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定