啊磊不吃鱼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

最近项目需求,要求给项目进行加签验签。目的是为了防止数据被篡改,加强数据安全性。

加签验签的功能实现大致分为:

1(加签)前端对数据进行MD5加密,将MD5后的key放入请求头中,与数据一同传入后台。

                                                        

2(验签)后台接收数据时,在aop层对传输过来的数据重新进行MD5加密,并且取出请求头中的key,与其对比若一致则表明数据没有被篡改,若不一致则表示数据遭到篡改直接返回提示“验签失败”。

 1 @Around("md5InfoBefore()")
 2     public Object md5InfoBefore(ProceedingJoinPoint point) throws Throwable {
 3         log.info("--------md5InfoBefore PointCut Start--------");
 4         HttpServletRequest request = getHttpServletRequest();
 5         String requestUri = request.getRequestURI();
 6         log.info("--------requestUri:"+requestUri);
 7         //切点中获取requestBody中的值
 8         Object[] objects = point.getArgs();
 9         Map<String,Object> reqData=(Map<String, Object>) objects[0];
10         String key= MD5Encrypt.encodeWithoutfix(reqData.get("data").toString()+"&appKey=778899&AppSecret=123456" + new SimpleDateFormat("yyyyMMdd").format(new Date()));
11         if (!request.getHeader("key").equals(key) || StringUtils.isEmpty(request.getHeader("key"))){
12             throw new Exception("验签失败");
13         }
14         Map<String,Object> maps=new HashMap<>();
15         maps.put("data",JsonUtil.jsonToBean(reqData.get("data").toString(),Map.class));
16         objects[0] =maps;
17         return point.proceed(objects);
18     }

 

3(问题)一开始前后端加签一直不成功,原因:前端传入的data数据在后台接收时,顺序会被打乱,后端将乱序的data数据进行MD5后会产生不同的key因此与前端的key不一致。

               解决方案:前端将data数据传入后台时,对数据进行json转化,转成String类型。后台接收时,以String类型接收并且进行MD5这样就会与前端的key一致从而通过验签。

 

posted on 2018-08-27 15:20  啊磊不吃鱼  阅读(547)  评论(0编辑  收藏  举报