以我的代码来梳理
首先,在这段代码中我存入加密后的数据
//获取验证码图片
@GetMapping("/getCode")
public R getCode(HttpSession session) {
//生成一个包含四位随机数字与字母组合的图片验证码对象
ValidateCodeUtil.Validate randomCode = ValidateCodeUtil.getRandomCode();
//从生成的图片对象中提取其实际验证码值,通过调用randomCode.getValue().toLowerCase()方法,将其中的所有字母字符转化为小写形式
String lowerCase = randomCode.getValue().toLowerCase();
//对值进行MD5加密
String md5 = MD5Util.encryptMD5(lowerCase);
//将加密后的验证码值保存于HttpSession的session域中。
session.setAttribute("validate", md5);
return R.ok().entity(randomCode.getBase64Str());
}
之后,在sendCode请求中来获取session中的"validate"的值。
我的问题是在这里获取不到session中的值,下面是解决方法:
//发送短信验证码
@GetMapping("/sendCode")
public R sendCode(@RequestParam("phone") String phone,@RequestParam(value = "code") String code,HttpSession session) {
String validate;
//从session中获取验证码
validate = (String) session.getAttribute("validate");
//获取用户传入的验证码
String lowerCase = code.toLowerCase();
//进行加密
String md5 = MD5Util.encryptMD5(lowerCase);
if (StringUtils.isEmpty(validate)){
//session没有验证码
throw new WillException(E.USER_CODE_N61);
}
if (!validate.equals(md5)){
//验证码不同
throw new WillException(E.USER_CODE_N77);
}
String[] codeGenerate = {CodeUtil.generateCode(4)};
String encryptMD5 = MD5Util.encryptMD5(codeGenerate[0]);
redisTemplate.opsForValue().set(phone, encryptMD5, 120, TimeUnit.SECONDS);
return R.ok().entity(codeGenerate[0]);
}
这边先设置断点,查看数据是否存入。
通过调试可以看到key为validate的值已经存入session
但问题是获取不到session中的值
下面开始解决问题: 把下图session中的id值复制(session标识)
将id粘贴在Apipost中的Cookie管理器的JSESSIONID下,
这一步是将请求绑定在同一会话中,这样下次访问时,
会根据session的id标识拿到这个session中的数据。