V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
qinfengge
V2EX  ›  程序员

大佬们帮帮忙,关于 mybatis plus 多租户拦截器

  •  
  •   qinfengge · 2023-05-29 19:36:58 +08:00 · 1901 次点击
    这是一个创建于 568 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上的教程大多都是直接配置,然后拦截到所有 SQL 了,但有些表是不分租户的。

    还有就是 spring boot 初始化的时候会读表里的配置信息,这时候初始化就会报错了。

    有没有什么方法让它不拦截某些 SQL ,比如搞个自定义注解,让它只拦截被标记的方法。

    我是个彩笔,有没有大佬使用通俗且小白的方式回答下。感激不尽

    8 条回复    2023-05-30 14:59:16 +08:00
    guzzhao
        1
    guzzhao  
       2023-05-29 20:24:11 +08:00
    qinfengge
        2
    qinfengge  
    OP
       2023-05-29 20:49:19 +08:00
    @guzzhao 感谢,不过这个我也看过了,它是先进的拦截器再判断是否过滤表,但是有个问题就是登录的时候还没有 token ,获取不到 TenantId😂
    guzzhao
        3
    guzzhao  
       2023-05-29 22:10:40 +08:00
    @qinfengge @SqlParser 这个注解用在 mapper 上
    jptx
        4
    jptx  
       2023-05-29 22:27:24 +08:00
    `TenantLineHandler` 中的 `ignoreTable` 方法中,从当前线程上下文获取用户信息,如果没有用户信息,则返回 true ,代表不按租户 ID 过滤
    ccw4wcc
        5
    ccw4wcc  
       2023-05-30 11:24:44 +08:00
    可以写一个单独的 mapper 方法,然后用注解,忽略掉租户拦截器吧
    freeup
        6
    freeup  
       2023-05-30 11:50:16 +08:00
    可以根据表结构建立元数据,通过解析 sql 拿到每个表名,然后根据表名查询元数据,看看是否有租户字段,在进行过滤,我之前的项目就是这样做的,通过 mybatis 插件,拦截所有 sql 基于元数据 进行后续逻辑处理
    issakchill
        7
    issakchill  
       2023-05-30 14:57:37 +08:00
    很多方法的呀 写死表名 或者表名打注解 TableInfoHelper 都能拿到
    qinfengge
        8
    qinfengge  
    OP
       2023-05-30 14:59:16 +08:00
    已经可以了,感谢各位大佬回复。还是用的官方文档里面的方式。出错的原因是登录的时候还是主线程,但是拦截到的却是子线程,导致获取不到 threadlocal 的值😅
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5343 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:23 · PVG 16:23 · LAX 00:23 · JFK 03:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.