You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

异常响应意外被掩码处理的原因排查

问题原因与解决方案

问题根源

你当前的配置把MaskingSerializer注册成了全局String类型序列化器,这意味着Jackson在序列化任何String对象时都会使用这个序列化器——包括Spring Boot默认异常响应(比如DefaultErrorAttributes生成的error、message、path等字段),所以这些不该被掩码的内容也被处理了。

你添加的@Masked注解实际上没有起到过滤作用:一方面全局序列化器的优先级高于字段级的@JsonSerialize,另一方面你也没有编写逻辑让序列化器仅对标记了@Masked的字段生效。

修复方案

需要调整配置,让MaskingSerializer只对标记了@Masked注解的字段生效,步骤如下:

  1. 自定义BeanSerializerModifier,动态为带注解的字段分配序列化器:
public class MaskingBeanSerializerModifier extends BeanSerializerModifier {
    @Override
    public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
        for (BeanPropertyWriter writer : beanProperties) {
            // 检查字段是否标记了@Masked注解
            if (writer.getAnnotation(Masked.class) != null) {
                writer.assignSerializer(new MaskingSerializer());
            }
        }
        return beanProperties;
    }
}
  1. 更新Jackson配置,注册上述Modifier而非全局String序列化器:
// JacksonConfig
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
    return builder -> builder.modules(new SimpleModule().setSerializerModifier(new MaskingBeanSerializerModifier()));
}
  1. 简化字段注解,只保留@Masked即可(无需再手动加@JsonSerialize):
@Masked
private String sensitiveField;

效果验证

修改后,只有标记了@Masked的字段会被掩码,Spring Boot的异常响应里的error、message、path等String字段会正常显示,不再被掩码。

内容的提问来源于stack exchange,提问作者Foobar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:07:37