编写了一个类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;
}
}