大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
问题描述
今天开发验证码验证功能,需要将手机号和对应的验证码设置到session中以便后面的验证,具体代码如下:
1.发送验证码并把验证码保存到session中
protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
try {
mresponse = response;
String mobile = req.getParameter("phoneNum");
JSONObject json = null;
//生成6位验证码
String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000);
//发送短信
sendPhoneNumCode(mobile,verifyCode);
json = new JSONObject();
json.put("mobile", mobile);
json.put("verifyCode", verifyCode);
json.put("createTime", System.currentTimeMillis());
// 将认证码存入SESSION
HttpSession session = req.getSession();
session.setAttribute("verifyCode", json);
return ;
} catch (Exception e) {
e.printStackTrace();
}
}
2.从session中取出验证码和前端发送过来的验证码进行比对
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String mobile = request.getParameter("phoneNum");
String verifyCode = request.getParameter("verifyCode");
HttpSession session = request.getSession();
JSONObject json = (JSONObject) session.getAttribute("verifyCode");
System.out.println("request_phoneNum:"+mobile);
System.out.println("request_verifyCode:"+verifyCode);
String json_phoneNum = (String) json.get("mobile");
String json_verifyCode = (String) json.get("verifyCode");
System.out.println("json_phoneNum:"+json_phoneNum);
System.out.println("json_verifyCode:"+json_verifyCode);
}
结果上面的代码 session.getAttribute(“verifyCode”);报空指针异常,说取不到verifyCode这个字段的值。
原因是设置verifyCode字段时的session和取verifyCode字段时的session不是一个,所以在取的时候就找不到verifyCode这个字段了。
解决办法是用设置时session去取verifyCode。
那怎么搞呢?
在获取验证码时讲session保存起来,然后验证时将这个session再传递过去就ok了。
我在android上实现的具体代码是:
1.获取session并保存
Headers headers = response.headers();
List<String> cookies = headers.values("Set-Cookie");
String s = cookies.get(0);
System.out.println("-----session:"+s);
//将这个session保存起来
AppConfig.session = s;
2.用addHeader()方法将session传递给后端
OkHttpUtils.post()
.url(HttpUrlConfig.URL + HttpUrlConfig.LoginAndRegister)
.addHeader("cookie",AppConfig.session)
.addParams("phoneNum", phoneNum)
.addParams("verifyCode", code)
.build()
到此问题就解决了。有问题欢迎评论
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/230252.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...