- 引入swagger相关依赖
io.springfox springfox-boot-starter3.0.0
这里不建议引入像swagger-bootstrap-ui的第三方ui,对swagger3注解的兼容性不大好(我试了)
- 添加SwaggerConfig
@Component
@Primary
public class SwaggerConfig implements SwaggerResourcesProvider {
private static final String SWAGGER2URL = "/v3/api-docs"; //要使用ui的话 改成v2 不然会出bug 比如有的地方 没有输入框
private final RouteLocator routeLocator;
@Value("${spring.application.name}")
private String self;
@Autowired
public SwaggerConfig(RouteLocator routeLocator) {
this.routeLocator = routeLocator;
}
@Override
public List get() {
List resources = new ArrayList<>();
List routeHosts = new ArrayList<>();
HashMap apiMap = new HashMap();
// 获取所有可用的host:serviceId
routeLocator.getRoutes().filter(route -> route.getUri().getHost() != null)
.filter(route -> !self.equals(route.getUri().getHost()))
.subscribe(route -> {
routeHosts.add(route.getUri().getHost());
// 分割网关配置的拦截路径 这里取第一个 /api/user, /api/chat
String routeApi = route.getPredicate().toString().split("\[")[1].split("]")[0].split(",")[0].replace("
private List securitySchemes()
{
List result = new ArrayList<>();
ApiKey apiKey = new ApiKey("xiaohong-token","身份令牌" ,"Header" );
result.add(apiKey);
return Collections.singletonList(apiKey);
}
private List securityContexts() {
return Collections.singletonList(
SecurityContext.builder()
//这里第一个参数要对应上面创建的ApiKey的name值
.securityReferences(Collections.singletonList(new SecurityReference("xiaohong-token", new AuthorizationScope[]{new AuthorizationScope("global", "身份令牌")})))
.build()
);
}
}
测试在Docket里的一个pathMapping配置我这里配成/api是因为swagger被网关接手了后,那所有请求的请求地址都需要经过网关,我这有个习惯就是在经过网关前的路径都加了/api前缀,在网关处再过滤掉,如果没有或有其他习惯的,可以自己看着写
网关访问 http://localhost:8001/swagger-ui/index.html
先来测试一个接口试试
可以看到,这个接口是需要提供token进行权限验证的,同时,这里的请求路径都是从网关的地址再凭借上我们自己加的/api,最后再拼接上接口的请求路径
那我们添加上token再试一遍
完成后这两把锁都锁上了,表示添加成功
如果没有都锁上,就要去看看配置文件里的两个名字是否没有匹配上了
再次测试
可以看到这次将我们输入的token带入了请求头中
我们使用调试工具看看
可以看到确实添加进去了
这里响应权限不足那是后端的处理逻辑
换一个有权限的账号token即可
这里我有不实验了
另一个服务我也不测了(写之前我已经测试过了,就不展示了)
饿了,吃饭去了



