针对PreAuth鉴权访问业务数据库而非bladex库产生的疑问

Blade 已结 2 2611
黄大仙
黄大仙 2020-03-13 10:22
悬赏:15

作者以及各位大佬们好,有关于我么系统的权限问题想请教一下各位: 


一、关于系统本身的鉴权的理解


        拜读了作者大大的源码以后发现,我们实现PreAuth注解,然后通过AOP的方式对进入各个微服务的请求进行权限控制,只要我们引入blade-core-secure包即可,在blade-core-secure会通过SPL表达式进行SQL查询(或者读取Redis缓存)

image.png



二、关于鉴权产生的疑问

    

       默认我们配置了Spring.DataSource是我们的Bladex库,所以引入了上述secure包以后,我们集成进来,访问的也是我们的Bladex的数据库,但是如果我们配置了Spring.DataSource为我们自身的业务数据库,再去引入secure包的话,jdbctemplate是不是就会使用我们业务数据库的连接配置呢。


二、个人思考解决方式


1. 通过多数据源的方式:  在每个需要连接业务数据库的服务模块,我们配置多数据源,默认数据源选择Bladex数据库,然后配置一个业务数据库的数据源,在Service的方法实现类上,加上@DS的注解选择业务数据库


2. 通过Fegin访问方式: 在原有的blade-system里面已经提供了ApiScopeClient的访问,我们抽离处一个包,做AOP拦截时候访问ApiScopeClient来做鉴权


3. 底层改了secure模块,然后去指定template模板加载

image.png


二、你期待的结果是什么?实际看到的又是什么?

    如果我的疑问不存在,那么麻烦作者大大告诉下,如果我得疑问确实存在,想请各位大佬们帮忙指导一下该用怎么样的方式解决这个问题比较好呢?


三、你正在使用的是什么产品,什么版本?在什么操作系统上?


商业版本 Bladex , 2.4.0版本, Windows系统



2条回答
  •  admin
    admin (楼主)
    2020-03-14 14:53

    在BladeX推荐第二种feign的方式,apiScopeClient写一个对应的client重写IPermissionHandler,然后其他的模块引入,这样就可以都从sys服务获取数据而不受制于多数据源的问题了。因为PreAuth底层获取的IPermissionHandler会从feignclient走而不是默认的底层jdbcTempate了


    而这个已经实现了,只需要引入对应依赖就行

    image.png


    当然最简单的方案还是做完全的无状态


    具体加载替换逻辑

    image.pngimage.pngimage.png



    ==============

    补充回答


    关于你下面提到的feign内耗问题,这个完全不用担心,因为只有在没有缓存的时候,第一次调用才会使用feign,等成功返回后就会把数据存入redis,下次再请求,就直接从redis缓存取了,不会再调用feign。

提交回复