一种实现敏感数据加解密方案

  • Post author:
  • Post category:其他


一种实现敏感数据加解密方案,基于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 版权协议,转载请附上原文出处链接和本声明。