使用spring BeanPostProcessor处理实例化对象

      编写了一个类DesensitizeValueFilter基于fastjson数据脱敏处理过滤器,因为项目统一配置了HttpMessageConverters。不想强行改动加入我的配置,打算基于ConditionalOnProperty条件注解开启配置,对FastJsonHttpMessageConverter做初始化后处理

@Configuration
@ConditionalOnProperty(value = "my.desensitization.enabled", havingValue = "true")
public class DesensitizationConfig {
    

    @Bean("myFastJsonBeanPostProcessor")
    public FastJsonBeanPostProcessor myFastJsonBeanPostProcessor(@Autowired DesensitizeValueFilter desensitizeValueFilter) {
        return new FastJsonBeanPostProcessor(desensitizeValueFilter);
    }
}
@Slf4j
public class FastJsonBeanPostProcessor implements BeanPostProcessor {

    public FastJsonBeanPostProcessor(DesensitizeValueFilter desensitizeValueFilter) {
        this.desensitizeValueFilter = desensitizeValueFilter;
    }

    private DesensitizeValueFilter desensitizeValueFilter;

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        if (!(bean instanceof HttpMessageConverters)) {
            return bean;
        }
        HttpMessageConverters httpMessageConverters = (HttpMessageConverters) bean;
        for (HttpMessageConverter<?> httpMessageConverter : httpMessageConverters.getConverters()) {
            if (!(httpMessageConverter instanceof FastJsonHttpMessageConverter)) {
                continue;
            }
            FastJsonHttpMessageConverter fastJsonHttpMessageConverter = (FastJsonHttpMessageConverter) httpMessageConverter;
            SerializeFilter[] serializeFilters = fastJsonHttpMessageConverter.getFastJsonConfig().getSerializeFilters();
            if (containsDesensitizeValueFilter(serializeFilters)) {
                continue;
            }
            serializeFilters = ArrayUtils.addAll(serializeFilters, desensitizeValueFilter);
            fastJsonHttpMessageConverter.getFastJsonConfig().setSerializeFilters(serializeFilters);
            log.info("设置fastJson敏感过滤成功:{}",DesensitizeValueFilter.class.getName());
        }
        return bean;
    }

    private boolean containsDesensitizeValueFilter(SerializeFilter[] serializeFiltersr) {
        for (SerializeFilter s : serializeFiltersr) {
            if (s instanceof DesensitizeValueFilter) {
                return true;
            }
        }
        return false;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值