开发者社区> 问答> 正文

springmvc消息进行全局加密和解密? 400 报错

springmvc消息进行全局加密和解密? 400 报错

问题,如何处理springmvc 中消息的加密和解密

流程

1、http请求统一采用POST,数据为json格式,然后使用AES加密后传到后台

2、后台AES解密后,处理请求,然后将json结果加密,传递到前台

目前想在框架层面进行处理,尝试使用了AOP around Advice,处理后能改变出参,但是无法改变入参,也查了些资料,around Advice主要处理需要缓存共享的信息时用到的

展开
收起
爱吃鱼的程序员 2020-05-30 23:50:27 747 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
     
    
    	@ResponseBody
    	public Map<String, Object> getTotalByMonth(HttpServletRequest request) {
    		
    		Map<String, Object> acceptMap = beforeAtMethod(request, resultMap);
    1. 所有 controller 中的方法开始都调用父类的一个方法,这个方法负责将 httpServletRequest 中的参数取出放到 hashmap 中
    2. 对hashmap 中加密的参数进行解密,拿到解密后的数据,即明文的参数,然后进行业务
    protected  Map<String, Object> beforeAtMethod(HttpServletRequest request, Map<String, Object> resultMap) {
    		Map<String, Object> acceptMap = null;
    		Map<String, Object> hashMap = new HashMap<String, Object>();
    		
    			acceptMap = setStreamToMap(request);
    			hashMap=encryptService.DeEncrypt(acceptMap);





    ######回复 @xiaoyuta : http://simplelist.github.io/2015/06/30/DeCrypt.html######您好,有更详细的代码描述吗?######回复 @一气化三清 : 你有更具体的实现方式吗?######这个是从程序级处理的,实在不行就用这种方法;我是想从框架级实现######

    定义一个全局拦截器RequestHandlerInterceptor implements HandlerInterceptor

    在这个方法表示请求前处理,可以解密,修改入参,public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {}

    这个方法表示请求后处理,可以加密public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception

    ######回复 @一气化三清 : controller 里边也能获取到request啊######拦截器我试过了,HttpRequest只能读取一次呀,我在拦截器中读了,后面方法里面就读取不到了######入参的话,可以通过 initBinder 来处理啊######拦截器如何######其实只要实现自己的HttpMessageConverter 接口就可以了,不需要aop,主要是实现read和write方法######怎么感觉使用拦截器会简单,不过没有现成的例子######

    1.https

    2.我们现在做的对参数加密,统一解密成map<String,Object> 相应的 controller ,service 只能在自己做类型转换

    ######
    用filter就可以啊
    ######

    入参可以用filter,请过过来经过解密,不影响springmvc的编码和实现,这个我们这边有项目统一实现过,很方便。

    响应加密的话可以intercepter吧


    ######

    引用来自“伊人梦醉”的评论

    入参可以用filter,请过过来经过解密,不影响springmvc的编码和实现,这个我们这边有项目统一实现过,很方便。

    响应加密的话可以intercepter吧


    做一个DecodeFilter,获取content,做解密,然后再把参数包装到HttpServletRequestWrapper,再把HttpServletRequest对象指向这个新的包装的request,后面springmvc的处理就是透明的了
    2020-05-30 23:50:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载