在Spring Cloud OAuth2中使用swagger

pom 文件中添加依赖

 <dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
</dependency>
复制代码

添加 Swagger 配置


import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.ApiKeyVehicle;
import springfox.documentation.swagger.web.SecurityConfiguration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static springfox.documentation.builders.PathSelectors.regex;

/**
 * Swagger配置
 * @author yangzhongyang
 */
@Configuration
@EnableSwagger2
@Profile("swagger")
public class SwaggerConfiguration {
	@Value("${spring.application.name}")
	private String serviceName;


	private String serviceDesc = "授权中心";


	@Value("${security.oauth2.client.client-id}")
	private String clientId;
	@Value("${security.oauth2.client.client-secret}")
	private String clientSecret;

	// 授权中心地址
	private String OAuthServerUri = "http://localhost:8888";

	private static final Predicate<String> SWAGGER_PATHS = PathSelectors.regex("^(?!.*error$).*");
	public static final String securitySchemaOAuth2 = "oauth2schema";

	@Bean
	public Docket postsApi() {
		return new Docket(DocumentationType.SWAGGER_2).groupName("v2")
				.apiInfo(apiInfo()).select().paths(postPaths())
				.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
				.paths(springBootActuatorJmxPaths())
				.build()
				.securitySchemes(Collections.singletonList(securitySchema()))
				.securityContexts(Collections.singletonList(securityContext()));
	}

	private ApiInfo apiInfo() {
		return new ApiInfoBuilder().title(serviceName).description(serviceDesc).build();
	}


	private Predicate<String> postPaths() {
		return regex("/.*");
	}

	private Predicate<String> springBootActuatorJmxPaths() {
		return regex("^/(?!env|restart|pause|resume|refresh).*$");
	}


	/**
	 * 这里使用 ResourceOwnerPasswordCredentialsGrant 也就是password授权方式
	 * @return
	 */
	private OAuth securitySchema() {
		//这里设置 client 的 scope
		final AuthorizationScope authorizationScope = new AuthorizationScope("openid", "允许测试阶段访问的所有接口");
		final GrantType grantType = new ResourceOwnerPasswordCredentialsGrant(OAuthServerUri + "/oauth/token");
		return new OAuth(securitySchemaOAuth2, Arrays.asList(authorizationScope), Arrays.asList(grantType));
	}

	private SecurityContext securityContext() {
		return SecurityContext.builder()
				.securityReferences(this.defaultAuth())
				.forPaths(SWAGGER_PATHS)
				.build();
	}

	@Bean
	public SecurityConfiguration securityInfo() {
		return new SecurityConfiguration("web_app", "hello", "", "", "", ApiKeyVehicle.HEADER, "", " ");
	}

	private List<SecurityReference> defaultAuth() {
		final AuthorizationScope authorizationScope =
				new AuthorizationScope("openid", "允许测试阶段访问的所有接口");
		final AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
		authorizationScopes[0] = authorizationScope;
		return Arrays.asList(
				new SecurityReference(securitySchemaOAuth2, authorizationScopes));
	}
}
复制代码

启动项目

启动项目之后我们访问 http://localhost:8888/swagger-ui.html 我们会发现如下页面

点击 Authorize 进行授权, 系统将会弹出如下页面

输入用户名密码之后点击 Authorize 之后我们将得到如下结果

这时候我们再进行接口访问就OK了

转载于:https://juejin.im/post/5c6ce32f518825625c272190

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值