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());
            // 将认证码存入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()

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Granger_g

大爷,赏小女子口饭吃如何?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值