問題描述:在請求協議不是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; } }