96SEO 2026-08-15 10:57 45
这篇文章基于一个真实的物联网 SaaS 网站项目。记录了在 MyBatis-Plus + PageHelper 分页插件的基础组件程序下使用 AOP 切面 + 自定义注解 + ThreadLocal + SQL 拦截器实现动态数据权限过滤的完整方案,还有在分页场景下踩到的“查不到租户信息”的深坑与排查过程。
在多租户 SaaS 程序中,不同角色登录后看到的数据范围不同。例如的观点是,

数据权限控制需要在业务代码无感知的情况下自动给 SQL 追加过滤条件。避免每个查询手动拼接,
| 组件 | 版本 | 作用 |
|---|---|---|
| MyBatis-Plus3.x ORM 框架,提供 InnerInterceptor 机制 | ||
| PageHelper6..1分页插件,基于 ThreadLocal 实现自动分页 | ||
| Spring AOP-切面拦截,在方法执行前后织入权限逻辑 | ||
| JSqlParser-SQL 解析,动态 WHERE 条件 |
数据权限过滤的主要思路是:AOP 切面负责收集权限上下文 → ThreadLocal 传递 → SQL 拦截器负责 SQL.
<─────────────────────────────────────────────────────────────>
| 业务层 Service |
| PageHelper.startPage + mapper.getEquipmentList |
<──────────────────────────┬──────────────────────────────────>
| @DataScope 注解触发
▼
<─────────────────────────────────────────────────────────────>
| AOP 切面 DeviceDataScopeAspect |
| . 获取当前登录使用者 |
| . 查询租户信息。判断是否管理员 |
| . 非管理员:查询角色绑定的区域/机构权限 |
| . 将权限上下文写入 ThreadLocal |
| . point.proceed 执行目标方法 |
| . finally 清理 ThreadLocal |
<──────────────────────────┬──────────────────────────────────>
| MyBatis 执行 SQL
▼
<─────────────────────────────────────────────────────────────>
| SQL 拦截器 DeviceDataScopeInterceptor |
| . 从 ThreadLocal 读取权限上下文 |
| . 管理员:跳过 |
| . 非管理员:用 JSqlParser
SQL,追加 WHERE 条件 |
| 如:district_id IN |
<─────────────────────────────────────────────────────────────>
标注在 Mapper 方法上,声明该查询需要数据权限过滤,并指定过滤字段:
@Target
@Retention
public @interface DataScope {
// 数据资源类型:设备/区域/机构/人员
DataResourceEnum dataResource default DataResourceEnum.DEVICE;其实,// 数据库表中的过滤字段别名。如 "e.district_id"
String filterFieldAlias default "device_id";// 是否走子查询模式
boolean subQuery default false;String subQueryField default "";String subQueryTable default "";
String subQueryFilterFieldAlias default "";}
再看使用示例,
@DataScope
List getEquipmentList EquipmentListQuery dto);
在 AOP 切面和 SQL 拦截器之间传递权限数据:
public class SqlEnhanceContext {
private static final ThreadLocal
存储的上下文键值:
| Key | 含义 |
|---|---|
: filtering field name e.g.,e.district_id. |
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback