(一)Json序列化实现脱敏(二)使用MyBatis的拦截器功能(三)通过实现ResponseBodyAdvice接口进行返回数据脱敏(四)数据库查询脱敏(五)AOP切面方式实现脱敏
(一)Json序列化实现脱敏常见的JSON工具包有gson和fastsjon、jackson。我们可以通过对数据的自定义序列化进行脱敏。主要实现就是通过自定义对应标识字段的序列化方式。
(二)使用MyBatis的拦截器功能如果项目中使用了MyBatis作为持久层框架,那么可以利用框架所提供得拦截器组件进行数据后置的处理。实现原理就是拦截响应回来的结果,然后对结果进行脱敏处理。
public class DesensitizedInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
List
(三)通过实现ResponseBodyAdvice接口进行返回数据脱敏
Spring提供了ResponseBodyAdvice接口,通过实现这个接口,可以修改返回值直接作为 ResponseBody类型处理器的返回值。
ResponseBodyAdvice仅拦截Controller中所有带有@ResponseBody的方法.
这种处理方式和JSON序列化方式实现相近
public interface ResponseBodyAdvice(四)数据库查询脱敏{ //用来判断是否需要进行特定的操作,比如是否需要脱敏 boolean supports(MethodParameter returnType, Class extends HttpMessageConverter>> converterType); // 修改返回数据内容 T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType, Class extends HttpMessageConverter>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response); }
【1】数据在存储时已经以某种算法或者策略进行了非明文存储
【2】通过SQL语句的left()、locate()、substr()、right()、random()等字符串截取,生成随机值,定位等函数,在SQL查询过程中就进行数据的脱敏。
【3】这种方式相对来说最为简单,仅需要修改少量代码,尤其适合于数据分析和大屏展示等场景下。
通过AOP的方式在数据入库前进行字段参数的脱敏/加密入库,或者在查询时针对返回值进行拦截处理。



