SpringSecurity+JWT实现文旅系统细粒度数据权限管控(多角色数据隔离)

摘要:文旅后台存在管理员、计调、带队导游、售后等多角色,不同角色需严格隔离团期、订单、游客数据。传统角色权限仅控制菜单,无法解决数据越权查看、跨团队数据泄露问题。本文基于 SpringSecurity+JWT 实现文旅业务专属细粒度数据权限,通过自定义数据权限注解+SQL动态过滤,实现多角色精准数据隔离,满足文旅数据安全与等保合规要求。

关键词:SpringSecurity;JWT;数据权限;文旅系统;多角色隔离;越权防护

一、文旅业务核心技术痛点

  1. 导游仅可查看自己带队团期,无数据权限隔离会导致全员数据泄露;
  2. 计调只能操作负责线路,越权查询易造成订单、隐私数据外泄;
  3. 传统RBAC菜单权限粒度太粗,无法实现行级数据隔离,存在严重安全漏洞。
    二、整体设计思路
  4. JWT令牌携带用户角色、所属团队、数据权限标识;
  5. 自定义文旅数据权限注解,切入Mapper层;
  6. 基于Mybatis拦截器动态拼接过滤SQL,实现行级数据隔离;
  7. 超级管理员全量可见,普通角色严格匹配所属数据范围。
    三、核心代码实现
  8. 自定义数据权限注解
java 复制代码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TourDataScope {
    // 数据权限表别名
    String alias() default "";
}
  1. JWT用户权限载体实体
java 复制代码
@Data
public class TourUserAuth {
    // 用户ID
    private Long userId;
    // 角色标识:admin/operator/guide
    private String role;
    // 负责团队ID
    private Long teamId;
}
  1. Mybatis数据权限拦截器(核心)
java 复制代码
@Component
@Intercepts({@Signature(type = StatementHandler.class,method = "prepare",args = {Connection.class,Integer.class})})
@Slf4j
public class TourDataScopeInterceptor implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 获取当前登录用户权限信息
        TourUserAuth auth = SecurityUtil.getAuthUser();
        // 超级管理员放行
        if("admin".equals(auth.getRole())){
            return invocation.proceed();
        }
        // 非管理员动态拼接数据过滤条件:仅查询自己团队数据
        StatementHandler handler = (StatementHandler) invocation.getTarget();
        String sql = handler.getBoundSql().getSql();
        String newSql = sql + " AND team_id = " + auth.getTeamId();
        // 重写SQL实现数据隔离
        ReflectUtil.setFieldValue(handler.getBoundSql(),"sql",newSql);
        return invocation.proceed();
    }
}
  1. Mapper层使用
java 复制代码
public interface TourGroupMapper {
    @Select("select * from tour_group")
    @TourDataScope(alias = "tg")
    List<TourGroup> selectGroupList();
}

四、业务落地价值

  1. 杜绝数据越权:从SQL层强制隔离不同角色数据,修复文旅系统数据安全漏洞;
  2. 权限粒度精细化:区别于传统菜单权限,实现行级数据精准控制;
  3. 合规性提升:满足文旅用户隐私数据隔离要求,贴合等保数据安全规范;
  4. 低侵入高扩展:注解式开发,无需改动大量业务代码,可快速适配订单、团期、售后全模块。
    五、总结
    多数文旅系统仅实现菜单权限控制,存在极大数据安全隐患。基于Mybatis拦截器+JWT实现的数据权限方案,可低成本完成多角色数据隔离,是文旅后台标准化、安全化落地的刚需技术方案,可直接投产使用。

声明:本文为乐启国际旅行社有限公司算法技术实战复盘,仅用于技术交流与行业数字化落地参考。

相关推荐
特立独行的猫A41 分钟前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
大可不必了5 小时前
03 函数定义和调用
开发语言·python
I_belong_to_jesus5 小时前
C++关于分支预测的优化1
开发语言·c++·算法
承渊政道6 小时前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛6 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
imgsq6 小时前
GESP Python 一到四级:备考路线与真题特点
python·青少年编程
eggwyw8 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
2601_967979128 小时前
纯手写:Python安装pip完整教程,搞了几小时,终于成功
python·教程·pip·安装·包管理
Norna8 小时前
缓存文件从没写出来:一个 .json 被当成目录用了
python
aifannihao11 小时前
AI 学习第 14 课:CNN 训 6 轮卡在 0.5352,数据没打乱
pytorch·python·深度学习·cnn·学习路线