使用Mybatis-plus多租户解决越权问题
背景
权限校验完毕后,还需要解决水平越权问题,使用MyBatis-plus中的多租户拦截器可以轻松解决。
文档地址:https://mp.baomidou.com/guide/interceptor-tenant-line.html#tenantlineinnerinterceptor
代码
@Configuration
public class MybatisPlusPageConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
mybatisPlusInterceptor.addInnerInterceptor(new TenantLineInnerInterceptor(this.tenantLineHandler()));
return mybatisPlusInterceptor;
}
/**
* 多租户的形式解决越权问题
* @return
*/
private TenantLineHandler tenantLineHandler() {
return new TenantLineHandler() {
/**
* 租户id
* @return
*/
@Override
public Expression getTenantId() {
return new LongValue(LoginInterceptor.threadLocal.get().getId());
}
/**
* 查询的列,指数据库中的列
* @return
*/
@Override
public String getTenantIdColumn() {
return "user_id";
}
/**
* 忽略的表名
* @param tableName
* @return
*/
@Override
public boolean ignoreTable(String tableName) {
if (tableName.equalsIgnoreCase("address")) {
return false;
}
return true;
}
};
}
}