只要三个注解,优雅的实现微服务鉴权!( 二 )

其实这中间的逻辑非常简单,就是解析的Token中的权限、角色然后和注解中的指定的进行比对 。
@RequiresPermissions这个注解的逻辑陈某并未实现,自己根据业务模仿着完成,算是一道思考题了....
4. 注解使用比如《Spring Cloud Alibaba 实战》项目中有一个添加文章的接口,只有超管和管理员的角色才能添加,那么可以使用@RequiresRoles注解进行标注,如下:
@RequiresRoles@AvoidRepeatableCommit@ApiOperation("添加文章")@PostMApping("/add")public ResultMsg<Void> add(@RequestBody @Valid ArticleAddReq req){ .......}效果这里就不演示了,实际的效果:非超管和管理员角色用户登录访问,将会直接被拦截,返回无权限 。
注意:这里仅仅解决了下游服务鉴权的问题,那么feign调用是否也适用?
当然适用,这里使用的是切面方式,feign内部其实使用的是http方式调用,对于接口来说一样适用 。
比如《Spring Cloud Alibaba 实战》项目中获取文章列表的接口,其中会通过feign的方式调用评论服务中的接口获取文章评论总数,这里一旦加上了@RequiresRoles,那么调用将会失败,代码如下:
@RequiresRoles@ApiOperation(value = https://www.isolves.com/it/cxkf/jiagou/2023-04-17/"批量获取文章总数")@PostMapping(value = "/list/total")public ResultMsg> listTotal(@RequestBody @Valid List param){....}总结本文主要介绍了微服务中如何将鉴权下放到微服务中,也是为了解决读者的疑惑,实际生产中除非业务需要,陈某还是建议将鉴权统一放到网关中 。




推荐阅读