Http下用户名和密码明文显示问题
问题描述:在请求协议不是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; } }