审计模块只有管理员才能看数据,并且普通租户管理员看不到超级管理员的数据,只有超级管理员才能看到自己的id。
你指的是什么情况暴露超管主键?

我说的审计字段指的是 :每张表都有的,创建人、创建部门、更新人这些字段
超管的数据和主键只有超管有权限看到,租户管理员看不到,并且租户管理员的数据普通用户也看不到。如果泄露了那么就代表管理员的账号密码都泄露了,首先要关心的其实是数据被批量导出,而不是主键ID被人看到了。
但这种情况系统级别防范不了,管理员账号密码泄露,登录上去啥都能看,就相当于防盗门钥匙丢了被人捡到然后开门,但不是防盗门自己的问题
可以自己改造Bladex-Tool实现
@Getter
@Setter
@ConfigurationProperties("blade.jackson")
public class BladeJacksonProperties {
/**
* null 转为 空,字符串转成"",数组转为[],对象转为{},数字转为-1
*/
private Boolean nullToEmpty = Boolean.TRUE;
/**
* 响应到前端,大数值自动写出为 String,避免精度丢失
*/
private Boolean bigNumToString = Boolean.TRUE;
/**
* 支持 MediaType text/plain,用于和 blade-api-crypto 一起使用
*/
private Boolean supportTextPlain = Boolean.FALSE;
/**
* 全局序列化时需要排除字段,允许配置多组排除字段,实体类通过配置@JsonFilter("group")注解确定使用那组排除字段
*/
private Map<String, Set<String>> filterField = new HashMap<>();
}修改JacksonConfiguration
public class JacksonConfiguration {
@Bean
@ConditionalOnMissingBean
public ObjectMapper objectMapper(BladeJacksonProperties properties) {
//创建默认的ObjectMapper
ObjectMapper objectMapper = JsonUtil.getInstance();
//允许空字符串序列化为null对象
objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
//自定义拓展配置
objectMapper.findAndRegisterModules();
if (!properties.getFilterField().isEmpty()) {
SimpleFilterProvider filterProvider = buildSimpleFilterProvider(properties.getFilterField());
// 将过滤器绑定到ObjectMapper
objectMapper.setFilterProvider(filterProvider);
}
return objectMapper;
}
/**
* 构建全局字段过滤配置
*
* @param filterField
* @return
*/
private SimpleFilterProvider buildSimpleFilterProvider(Map<String, Set<String>> filterField) {
SimpleFilterProvider filterProvider = new SimpleFilterProvider();
for (Map.Entry<String, Set<String>> filter : filterField.entrySet()) {
String filterId = filter.getKey();
Set<String> filterFields = filter.getValue();
// 定义过滤规则:排除指定字段
SimpleBeanPropertyFilter simpleBeanPropertyFilter = SimpleBeanPropertyFilter.serializeAllExcept(filterFields);
filterProvider.addFilter(filterId, simpleBeanPropertyFilter);
}
// 允许未知过滤器(避免未加@JsonFilter的实体报错)
filterProvider.setFailOnUnknownId(false);
return filterProvider;
}
}修改BaseEntity
@Data
@JsonFilter("base")
public class BaseEntity implements Serializable {Nacos添加配置
#blade配置
blade:
#jackson配置
jackson:
#null自动转空值
null-to-empty: true
#大数字自动转字符串
big-num-to-string: true
#支持text文本请求,与报文加密同时开启
support-text-plain: false
#配置全局序列化时需要排除字段,允许配置多组排除字段,实体类通过配置@JsonFilter("group")注解确定使用那组排除字段
filter-field:
# BaseEntity基类配置的基础排除字段组
base:
- createUser
- createDept
- createTime
- updateUser
- updateTime
- isDeleted这样改 后端接收实体的时候是不是字段也接收不到了
扫一扫访问 Blade技术社区 移动端