一)背景
原先开发了一个功能,由于是两个系统做交互,所以在参数传递这一块做的比较简陋,有安全性问题,需重新调整。
原先的实现方式是,在A系统做用户校验,校验成功之后,把用户信息直接加密拼接成一个url,然后直接redirect到B系统这个前端地址,B系统在前端页面直接从url地址中获取用户信息解密验证,这样的弊端就是,只要知晓你的加密解密方式,就可以模拟提交。
方案一,把加密方式设置复杂一点,B系统在前端页面获取参数解密验证之后,再重新跳转一下地址,这样用户就获取不到真实的url了,但这样也有一个弊端,通过抓包的方式,还是能抓取地址的更改情况,因为代码修改比较少,简单,但也被否定。
方案二,在A系统后台,把用户信息加密,通过调用B系统提供的rest服务传递参数,所以我在A系统后台用模拟form表单post方式提交来实现参数传递,B系统获取到用户信息在解析验证,并把信息保存到seesion中,再做下一步操作。
二)实现源码
package com.oysept.form.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.alibaba.fastjson.JSON;
import