千家信息网

swagger2如何集成OAuth2

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,swagger2如何集成OAuth2,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。GitHub地址码云地址swagger是一款优雅的接口
千家信息网最后更新 2025年02月03日swagger2如何集成OAuth2

swagger2如何集成OAuth2,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

GitHub地址

码云地址

swagger是一款优雅的接口api展示工具,在这里我们具体不展开讲解,有兴趣的自行百度。 该篇文章主要讲解的是如何集成OAuth3的验证即在请求中添加token,验证接口是否具有权限。

方式一:在每个请求上加一个Authorization 窗口自己手动输入token:

/** * @Description Swagger api 配置 * @Author wwz * @Date 2019/08/05 */@Configuration@EnableSwagger2public class SwaggerConfig2 {    @Value("${swagger.is.enable}")    private boolean SWAGGER_IS_ENABLE; //是否激活开关,在application.yml中配置注入    @Bean    public Docket docket() {        //添加head参数配置start        ParameterBuilder tokenPar = new ParameterBuilder();        List pars = new ArrayList<>();        tokenPar.name("Authorization").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build();        pars.add(tokenPar.build());        return new Docket(DocumentationType.SWAGGER_2)                .enable(SWAGGER_IS_ENABLE)                .apiInfo(apiInfo())                .select()                .apis(RequestHandlerSelectors.basePackage("com.wwz.frame.controller"))                .paths(PathSelectors.any())                .build()                .globalOperationParameters(pars);//注意这里;    }    private ApiInfo apiInfo() {        return new ApiInfoBuilder()                // 页面标题                .title("OAuth3权限管理API文档")                .contact(new Contact("wwz", "", "wwzwtf@qq.com"))                .description("OAuth3维护文档")                .version("1.0")                .extensions(Collections.emptyList())                .build();    }}

效果截图:

方式二:配置application.yml文件 设置好token登录的地址,是否启用swagger,新建配置文件

/** * @Description Swagger api 配置  模式二:增加登录 * @Author wwz * @Date 2019/08/05 */@Configuration@EnableSwagger2public class SwaggerConfig {    @Value("${swagger.is.enable}")    private boolean SWAGGER_IS_ENABLE; //是否激活开关,在application.yml中配置注入    @Value("${swagger.auth.server}")    private String AUTH_SERVER;    @Value("${swagger.service.name}")    private String SERVICE_NAME;    @Bean    public Docket docket() {        return new Docket(DocumentationType.SWAGGER_2)                .enable(SWAGGER_IS_ENABLE)                .apiInfo(apiInfo())                .select()                .apis(RequestHandlerSelectors.basePackage("com.wwz.frame.controller"))                .paths(PathSelectors.any())                .build()//                .pathMapping(SERVICE_NAME)                .securitySchemes(Collections.singletonList(securityScheme()))                .securityContexts(Collections.singletonList(securityContext()));    }    private ApiInfo apiInfo() {        return new ApiInfoBuilder()                // 页面标题                .title("OAuth3权限管理API文档")                .contact(new Contact("wwz", "", "wwzwtf@qq.com"))                .description("OAuth3维护文档")                .version("1.0")                .extensions(Collections.emptyList())                .build();    }    /**     * 这个类决定了你使用哪种认证方式,我这里使用密码模式     */    private SecurityScheme securityScheme() {        GrantType grantType = new ResourceOwnerPasswordCredentialsGrant(AUTH_SERVER);        return new OAuthBuilder()                .name("OAuth3")                .grantTypes(Collections.singletonList(grantType))                .scopes(Arrays.asList(scopes()))                .build();    }    /**     * 这里设置 swagger2 认证的安全上下文     */    private SecurityContext securityContext() {        return SecurityContext.builder()                .securityReferences(Collections.singletonList(new SecurityReference("OAuth3", scopes())))                .forPaths(PathSelectors.any())                .build();    }    /**     * 这里是写允许认证的scope     */    private AuthorizationScope[] scopes() {        return new AuthorizationScope[]{        };    }}

在MySecurityResourceServerConfig 放行swagger相关。

界面截图:

登录截图:

测试:

swagger 整合OAuth2完成。

看完上述内容,你们掌握swagger2如何集成OAuth2的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0