问题描述:在请求协议不是Https的情况下,使用Http协议会让参数被抓包抓取,为了防止用户信息被获取,将登录请求传递的参数进行加密处理。
1.客户端首先发送一个请求,服务端返回一个随机数,并保存到session。
2.客户端将密码以及随机数组合,然后进行加密,发送到服务端。
3.服务端接收到用户名和密码,取出随机数,然后与数据库的密码进行同样的加密,然后将session中的随机数删除。

实现:
@ApiOperation(value = "生成随机数",httpMethod = "GET",produces = "HTTP",protocols = "application/json") @GetMapping("/getRandom") public Result getRandom(HttpServletRequest request){ Random random = new Random(); int i = random.nextInt(1000); request.getSession().setAttribute("random",i); return new Result(BusinessConstant.SYSTEM_SUCESS_CODE,"发送成功",i); }
判断密码是否正确
Integer random = (Integer)request.getSession().getAttribute("random");
String md5Pwd = PasswordEncrypt.getMD5(adsUserAuth.getPassword()); //得到密码加密
String pas = PasswordEncrypt.getMD5(md5Pwd + random); //取得密码比对前端传递的
public class PasswordEncrypt {
//盐,用于混交md5
private static String salt = "oyabc_yyy";
/**
* 生成md5
* @param str
* @return
*/
public static String getMD5(String str) {
String base = str + "/" + salt;
String md5 = DigestUtils.md5DigestAsHex(base.getBytes());
return md5;
}
}
