【百度搜不到】Spring-Security+Swagger根据指定的用户角色生成不同的API文档

前言

Swagger用来制作API文档十分方便,但是在项目分角色进行API鉴权时,如果事先没有对整个项目的API层级有很好的定义的时候(代码的分包比较混乱,一个controller中包含多个角色调用的接口),会显得整个API文档非常的臃肿,看起来很不方便。
这个问题,就被小编我遇到了。并且在网上浏览时,发现这方面的资料及其少,甚至说没有。。。万不得已,只能去撸一撸swagger的源码,并且源码也搞得我云里雾里的,但还是被我给找到了解决的方法,这里跟大家分享一下。

分析

重头分析下Swagger的配置类

这里着重看下,该配置类向Spring容器里注入Docket对象的配置,Docket其实就是配置API文档生成的参数。
在这里插入图片描述
说明:红框圈起来的就是生成API文档时,配置的请求处理选择器路径选择器,这里用的是默认的Swagger为我们提供的选择器。
RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class):意思就是被ApiOperation注解标注的方法会被添加进来。
PathSelectors.any():意思就是不进行路径过滤,你选出来啥就是啥。

看到这里的时候,突然有了个想法,如果能自己写一个满足需求的选择器,不就解决了吗

接下来看下RequestHandlerSelectors是个啥

这里主要看RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)这个方法返回了一个什么东西?跟到源码里,发现其实很简单。
在这里插入图片描述
就这么一行代码,就判断了一个RequestHandler类型的入参是否被指定的注解标注。

再看下RequestHandler是个啥

点进源码查看时,发现里面有个参数很有意思HandlerMethod
在这里插入图片描述
看到这里,就想着,既然这是选择方法的,会不会就是将扫描出来的方法,封装了一下呢?

最后看下HandlerMethod是个啥

于是就再点进去看了下HandlerMethod的源码,发现一个Method对象的成员变量,截图如下:
在这里插入图片描述

看到这里还是还是有点不确定,于是,将项目用debug模式运行起来,在RequestHandlerSelectors里面打了个断点,想着来验证一下。
连续断点几次之后,发现这些method好眼熟啊,不就是我定义的接口吗?
在这里插入图片描述

分析结果

这个Method就是扫描出来的我们定义的方法对象,那我们拿到这个对象之后,不是想怎么判断就怎么判断吗?感觉要飞起来了。。。
Swagger给的这个默认的选择器里面,只是做了注解判断而已,我们完全可以进行自己的判断啊!!!

实现自定义的RequestHandler选择器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值