天天看點

Swagger2+oauth2配置

  • 導入依賴
<!-- Swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-bean-validators</artifactId>
            <version>3.0.0</version>
        </dependency>
           
  • 配置資訊
@Bean
    public Docket createRestApi() {
        List<Response> responses = new ArrayList<Response>() {{
            add(new ResponseBuilder().code("201")
                .description("建立成功")
                .build());
            add(new ResponseBuilder().code("202")
                .description("請求已受理,正在進一步處理")
                .build());
            add(new ResponseBuilder().code("204")
                .description("請求已成功,但無需更多描述資訊")
                .build());
            add(new ResponseBuilder().code("400")
                .description("請求參數錯誤或格式不正确")
                .build());
            add(new ResponseBuilder().code("401")
                .description("Token 驗證失敗")
                .build());
            add(new ResponseBuilder().code("403")
                .description("登入失敗或權限禁止")
                .build());
            add(new ResponseBuilder().code("417")
                .description("參數格式不正确")
                .build());
        }};
        return new Docket(DocumentationType.SWAGGER_2)
            .securitySchemes(Collections.singletonList(securitySchemes()))
            .securityContexts(Collections.singletonList(securityContexts()))
            .globalResponses(HttpMethod.GET, responses)
            .globalResponses(HttpMethod.POST, responses)
            .globalResponses(HttpMethod.PUT, responses)
            .globalResponses(HttpMethod.HEAD, responses)
            .globalResponses(HttpMethod.DELETE, responses)
            .select()
            .apis(RequestHandlerSelectors.basePackage("wlgzs.exam.controller"))
            .build()
            .apiInfo(apiInfo());
    }

    /**
     * 認證方式使用密碼模式
     */
    private SecurityScheme securitySchemes() {
        GrantType grantType = new ResourceOwnerPasswordCredentialsGrant("/oauth/token");
        return new OAuthBuilder()
            .name("Authorization")
            .grantTypes(Collections.singletonList(grantType))
            .scopes(Arrays.asList(scopes()))
            .build();
    }

    /**
     * 設定 swagger2 認證的安全上下文
     */
    private SecurityContext securityContexts() {
        return SecurityContext.builder()
            .securityReferences(Collections.singletonList(new SecurityReference("Authorization", scopes())))
            .operationSelector((each) -> true)
            .build();
    }

    /**
     * 允許認證的scope
     */
    private AuthorizationScope[] scopes() {
        AuthorizationScope authorizationScope = new AuthorizationScope("all", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return authorizationScopes;
    }

    /**
     * 添加摘要資訊
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("API線上考試文檔")
            .build();
    }
           
Swagger2+oauth2配置
Swagger2+oauth2配置

繼續閱讀