Springboot使用session容器存取短信验证码

Springboot使用session容器存取短信验证码,(手抖挖了坑在@WebListener类声明时候加了个abstract导致springboot扫描不到这个监听器

需求:为了给app做接口,在session中存取短信验证码,接口速速撸好swagger测试从session中拿短信验证码信息66的没问题(因为在浏览器范围访问,访问的时候请求头自动带着sessionid的所以没问题),当用postman测试拿到的session内容是null(原因是像手机app或者postman请求时候并没有带sessionid,所以让服务端给你取session数据它并不知道从哪个盒子里拿数据故而拿不到数据

实现结果:在springboot环境中,自定义session容器实现通过sessionId获取session

app手机验证码存取两种方式:

方式一:数据库或者Redis等缓存存取,略。

方式二:session存取如下,注:没有做删除

话不多说,直接上代码:

1、在启动类头上加扫描注解:

@ServletComponentScan

2、session容器类

 1 package com.xxx.api.listener;
 2
 3 import javax.servlet.http.HttpSession;
 4 import java.util.HashMap;
 5
 6 /**
 7  * @Auther:
 8  * @Date: 2018/6/22 18:58
 9  * @Description:
10  */
11 public class SessionContext {
12     private static SessionContext instance;
13     private HashMap mymap;
14
15     private SessionContext() {
16         mymap = new HashMap();
17     }
18
19     public static SessionContext getInstance() {
20         if (instance == null) {
21             instance = new SessionContext();
22         }
23         return instance;
24     }
25
26     public synchronized void AddSession(HttpSession session) {
27         if (session != null) {
28             mymap.put(session.getId(), session);
29         }
30     }
31
32     public synchronized void DelSession(HttpSession session) {
33         if (session != null) {
34             mymap.remove(session.getId());
35         }
36     }
37
38     public synchronized HttpSession getSession(String session_id) {
39         if (session_id == null) return null;
40         return (HttpSession) mymap.get(session_id);
41     }
42 }

3、HttpSessionListener监听类,当session产生的时候把session加入到容器里,重点这里加上注解

@WebListener
 1 package com.xxxxx.api.listener;
 2
 3 import com.xn.api.app.login.ApiLoginController;
 4 import org.slf4j.Logger;
 5 import org.slf4j.LoggerFactory;
 6
 7 import javax.servlet.annotation.WebListener;
 8 import javax.servlet.http.HttpSession;
 9 import javax.servlet.http.HttpSessionEvent;
10 import javax.servlet.http.HttpSessionListener;
11 import java.util.HashMap;
12 import java.util.Map;
13
14 /**
15  * @Auther:
16  * @Date: 2018/6/22 18:54
17  * @Description:
18  */
19 @WebListener
20 public class SessionListener implements HttpSessionListener {
21     protected static Logger logger=LoggerFactory.getLogger(ApiLoginController.class);
22
23
24     public static Map userMap = new HashMap();
25     private SessionContext sessionContext = SessionContext.getInstance();
26
27
28     public void sessionCreated(HttpSessionEvent httpSessionEvent) {
29         HttpSession session = httpSessionEvent.getSession();
30         logger.debug("info------>sessionCreated----->sessionId:" + session.getId());
31         sessionContext.AddSession(session);
32     }
33
34     public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
35         HttpSession session = httpSessionEvent.getSession();
36         logger.debug("info------>sessionDeath----->sessionId:" + httpSessionEvent.getSession().getId());
37         sessionContext.DelSession(session);
38     }
39
40 }

4、存取正常存取方式存取就可以

HttpSession httpSession = request.getSession();
//这个sessionId返回给APP,便于下次验证请求时获取session能根据sessionId获取
String sessionId = httpSession.getId();
//httpsession存取数据
httpSession.setAttribute("电话", "验证码");

5、根据sessionId获取session

//自定义session容器
SessionContext sessionContext= SessionContext.getInstance();
//从自定义session容器中拿到对应session
HttpSession session = sessionContext.getSession(sessionId);
String 验证码= String.valueOf(session.getAttribute("电话"));

完毕。

原文地址:https://www.cnblogs.com/awei4home/p/9216556.html

时间: 2024-10-07 15:47:23

Springboot使用session容器存取短信验证码的相关文章

短信验证码实现

项目做了登录改密功能需要验证码的功能. 思路:页面点击获取验证码按钮,发送请求到后台,携带用户名作为参数.后台做一个servlet查询该用户的手机号.生成随机验证码.将验证码(+消息)+tel作为参数+其他接口参数拼成url调用第三方服务(云信). 实现: 1.页面js方法 function get_code_time(){ var uname = $("#uname").val(); if(!uname){ $("#users").html("请先输入您

实现短信验证码

朋友让帮忙做一个短信验证码工具,对此有了初体验. 1. 编码转换:字符集必须是GB2312格式,字符必须用UrlEncode进行编码. $sms = "短信验证码:2312[大象投资]"; // utf8 echo urlencode(mb_convert_encoding($sms,'gb2312','utf-8')); 2. 通知类短信,如果没有备案,晚上.周末等非工作时间不能发送,必须白天发送,因为那时候才有人工审查. 3. 验证码类短信,随便发,没有太多限制. 了解到上面的内容

实现短信验证码注册

今晚研究了下短信验证码注册,很简单,用的是  云通讯的短信系统(收费的,不过有测试的api给我们做测试).好了,不多说,进入正题. 1.收到到云通讯短信系统注册账号,然后下载他们的封装好的短信api接口代码,解压,然后找到CCPRestSDK.php文件和SendTemplateSMS.php文件,将其拉到根目录文件夹里: 2.打开SendTemplateSMS.php文件,首先注意include_once('./CCPRestSDK.php'),千万别包含错路径了,将云通讯给的测试主账号,主账

Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结

Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如要求拖动等21.3. 第三代验证码 手机验证码 短信验证码22. 短信验证码的原理23. 常用破解法23.1. 漏洞绕过法23.2. 手机 软件转发法23.3. 手机api法33.4. 默认万能密码法 测试维护万能验证码33.5. 网站服务器短信发出截获33.6. 配置文件法33.7. 前端源码截获

JAVA利用第三方平台发送短信验证码。

前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能. 发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较. 为了防止有广告嫌疑

php 给app写短信验证码 使用memcache缓存验证码

废话不多说  直接上代码 直接使用session 储存短信验证码,app  那边一直说获取不到 注册的时候一直提示空  后面想想还是用缓存吧 上代码: //发送验证码方法 public function sendSMSCodeOp(){ require_once(BASE_ROOT_PATH.DS.'api/framework/function/sms.php'); require_once(BASE_ROOT_PATH.DS.'api/framework/function/common.php

SSH2框架实现注冊发短信验证码实例

这两天開始写程序了,让用SSH2框架,曾经没有接触过Java项目更没有接触过SSH2框架,所以用注冊開始了我Java之旅.后来发现,后台代码挺easy理解的,跟.net的差点儿相同.就是层与层之间的调用,可是前面前台的交互我差非常多,在这里总结一下,顺便跟大家看一下.怎么实现往手机上发送短信验证码的.. 大家先看看我的界面. 原图: 短信验证码错误的界面: 短信验证码正确的界面: 以下開始我的界面代码展示(JSP): <body > <h2 class="titlelog&qu

SSH2框架实现注册发短信验证码实例

这两天开始敲代码了,让用SSH2框架,以前没有接触过Java项目更没有接触过SSH2框架,所以用注册开始了我Java之旅.后来发现,后台代码挺容易理解的,跟.net的差不多,就是层与层之间的调用,但是前面前台的交互我差很多,在这里总结一下,顺便跟大家看一下,怎么实现往手机上发送短信验证码的.. 大家先看看我的界面. 原图: 短信验证码错误的界面: 短信验证码正确的界面: 下面开始我的界面代码展示(JSP): <body > <h2 class="titlelog"&g

在ASP.NET MVC下通过短信验证码注册

以前发短信使用过短信猫,现在,更多地是使用第三方API.大致过程是: → 用户在页面输入手机号码→ 用户点击"获取验证码"按钮,把手机号码发送给服务端,服务端产生几位数的随机码,并保存在某个地方(Session, Applicaiton, 数据库, 等等),调用第三方的API→ 第三方发送几位数的随机码至用户手机→ 用户在页面输入接收到的随机码→ 把随机码等发送给服务端,与服务端保存的随机码比较,如果一致,就通过,让注册 就按如下界面来说吧: 我们需要考虑的方面包括: ● 手机号码:判