一种实现敏感数据加解密方案,基于spring Interceptor
前言
由于项目用需要使用个人信息保护技术,所以项目引入数据加密,并且是数据库级别加密。由于项目使用mybatis,所以项目使用了myabtis 的 Interceptor handler技术。技术原理不解释,而我这里要解释一个新方案。
一、常用方案&我的方案
网上大部分的方案都是提示在mybatis添加handler处理,但是其对于非对象参数的处理并不友好,甚至说非常麻烦。所以本方案使用spring 的 Interceptor 去处理。但是如果业务对与未加密数据有使用需求,则本方案并不适用,或者需要修改业务代码。
二、使用步骤
1.创建拦截器实现 HandlerInterceptorAdapter
代码如下(示例,不能直接使用!!!):
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
//缓存类.变量
Method method = handlerMethod.getMethod();
boolean b = method.getParameterCount() > 0;
Class<?>[] parameterTypes = method.getParameterTypes();
//缓存比对
//参数解析器 spring
Parameter[] parameters = method.getParameters();
Parameter parameter = Arrays.stream(parameters).findFirst().get();
//类类型
Class<?> type = parameter.getType();
//缓存获取字段名称 class.filed
String filed = request.getParameter("filed");
Map<String, String[]> parameterMap = request.getParameterMap();
parameterMap.put("没加密","");
//加密
MethodParameter[] methodParameters = handlerMethod.getMethodParameters();
MethodParameter methodParameter = Arrays.stream(methodParameters).findFirst().get();
}
2.代码步骤解释
1、定义注解,给需要加密的字段添加注解
2、初始化Interceptor时候获取注解的类的字段,可以缓存起来
3、请求进入Interceptor时候,首先获取缓存中加密字段格式class.filed,通过handler获取到当前请求的方法及参数对象,匹配到请求参数对象后,通过request对象获取传入数值,将其加密后赋值给需要加密的对象,则加密完成。
总结
关于说业务代码需要处理未加密的数据,那么则可以在Interceptor中将未加密数据存储到另一个字段,而参数对象则可以继承一个类,使用Map作为变量存储未加密数据,用于业务处理,那这样的修改必然对业务是有影响的,方案大多数都是在controller或dao层面进行数据加密。
版权声明:本文为qq_29373343原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。