admin管理员组

文章数量:821270

getAttribute 返回值为null

问题描述

今天开发验证码验证功能,需要将手机号和对应的验证码设置到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());// 将认证码存入SESSIONHttpSession 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()

到此问题就解决了。有问题欢迎评论

本文标签: getAttribute 返回值为null