前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >getattr getattribute_getparameter返回值

getattr getattribute_getparameter返回值

作者头像
全栈程序员站长
发布2022-11-15 17:50:01
2020
发布2022-11-15 17:50:01
举报
文章被收录于专栏:全栈程序员必看

问题描述

今天开发验证码验证功能,需要将手机号和对应的验证码设置到session中以便后面的验证,具体代码如下:

1.发送验证码并把验证码保存到session中

代码语言:javascript
复制
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();
        }
	}

Jetbrains全家桶1年46,售后保障稳定

2.从session中取出验证码和前端发送过来的验证码进行比对

代码语言:javascript
复制
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并保存

代码语言:javascript
复制
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传递给后端

代码语言:javascript
复制
    OkHttpUtils.post()
                .url(HttpUrlConfig.URL + HttpUrlConfig.LoginAndRegister)
                .addHeader("cookie",AppConfig.session)
                .addParams("phoneNum", phoneNum)
                .addParams("verifyCode", code)
                .build()

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/230252.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档