关于审计字段的屏蔽

Blade 未结 3 60
dubbo
dubbo 2026-03-02 16:47

有些情况接口不想返回给前端

创建人、创建部门、更新人这些字段,有些数据是管理员创建的,这样接口请求会直接暴露超管的主键


感觉非常不安全,尝试过在tool里用注解屏蔽调 发现后端在get的时候也取不到了


有什么优雅的方式吗?

3条回答
  •  qdieslab
    qdieslab (楼主)
    1天前

    可以自己改造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


提交回复