博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Springboot使用session容器存取短信验证码
阅读量:4652 次
发布时间:2019-06-09

本文共 4348 字,大约阅读时间需要 14 分钟。

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.xxxxx.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:5417  * @Description:18  */19 @WebListener20 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容器中拿到对应sessionHttpSession session = sessionContext.getSession(sessionId);String 验证码= String.valueOf(session.getAttribute("电话"));

 

完毕。

================================================================================================

附:注册的方式向springboot注入Listener

1 package com.xxxxx.api.config; 2  3 import com.xxxxxxx.api.listener.SessionListener; 4 import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; 5 import org.springframework.context.annotation.Bean; 6 import org.springframework.context.annotation.Configuration; 7  8 /** 9  * @Auther: 10  * @Date: 2018/6/23 09:5911  * @Description:12  */13 @Configuration14 public class ListenerConfigure {15     @Bean16     public ServletListenerRegistrationBean
serssionListenerBean(){17 ServletListenerRegistrationBean
18 sessionListener = new ServletListenerRegistrationBean
(new SessionListener());19 return sessionListener;20 }21 22 }

 

转载于:https://www.cnblogs.com/awei4home/p/9216556.html

你可能感兴趣的文章
python 全栈开发,Day37(操作系统的发展史)
查看>>
InputStream 转换 InputStreamReader再转换BufferedReader
查看>>
在线程池中的使用spring aop事务增强
查看>>
继续深入了解Cookie 和 Session
查看>>
再看《操作系统》--处理机管理
查看>>
亚马逊的负载均衡(Amazon Load Balancing)
查看>>
Java学习之Comparable与Comparator的区别
查看>>
微信小程序canvas把正方形图片绘制成圆形
查看>>
CentOS安装python-2.7+安装pip-10.0.0
查看>>
MQTT_基础学习
查看>>
bzoj4556: [Tjoi2016&Heoi2016]字符串
查看>>
串行通信概念解析
查看>>
Sublime text 2之WIN7下安装Zencoding插件和使用
查看>>
java基础02
查看>>
WCF揭秘(一)——简单的WCF开发实例
查看>>
sql 分组查询满足条件所以数据
查看>>
Linux系统中为php添加pcntl扩展的方法
查看>>
js设计模式 -- 装饰模式
查看>>
【XSY1841】Intervals
查看>>
Sublime Text 2 使用心得
查看>>