
回复
3. 注解切面定义
注解有了,那么如何去拦截呢?这里陈某定义了一个切面进行拦截,关键代码如下:
其实这中间的逻辑非常简单,就是解析的Token中的权限、角色然后和注解中的指定的进行比对。
“@RequiresPermissions这个注解的逻辑陈某并未实现,自己根据业务模仿着完成,算是一道思考题了....
”
4. 注解使用
比如《Spring Cloud Alibaba 实战》项目中有一个添加文章的接口,只有超管和管理员的角色才能添加,那么可以使用@RequiresRoles注解进行标注,如下:
效果这里就不演示了,实际的效果:非超管和管理员角色用户登录访问,将会直接被拦截,返回无权限。
注意:这里仅仅解决了下游服务鉴权的问题,那么feign调用是否也适用?
当然适用,这里使用的是切面方式,feign内部其实使用的是http方式调用,对于接口来说一样适用。
比如《Spring Cloud Alibaba 实战》项目中获取文章列表的接口,其中会通过feign的方式调用评论服务中的接口获取文章评论总数,这里一旦加上了@RequiresRoles,那么调用将会失败,代码如下:
总结
本文主要介绍了微服务中如何将鉴权下放到微服务中,也是为了解决读者的疑惑,实际生产中除非业务需要,陈某还是建议将鉴权统一放到网关中。
文章转自公众号:码猿技术专栏