有些情况接口不想返回给前端
创建人、创建部门、更新人这些字段,有些数据是管理员创建的,这样接口请求会直接暴露超管的主键
感觉非常不安全,尝试过在tool里用注解屏蔽调 发现后端在get的时候也取不到了
有什么优雅的方式吗?
可以自己改造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> 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> filterField) {
SimpleFilterProvider filterProvider = new SimpleFilterProvider();
for (Map.Entry> filter : filterField.entrySet()) {
String filterId = filter.getKey();
Set 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技术社区 移动端