环境:前后端分离,部署在同一台服务器上

问题:前端登录页面实现验证码功能,使用的是catpcha框架,在web.xml中配置,但是在验证码验证中获取不到captcha在session的值,显示为null。

过程:

1、导入maven坐标

<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version><exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId></exclusion></exclusions>
</dependency>

2、web.xml 配置Servlet

<servlet><servlet-name>cap</servlet-name><servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class><init-param><param-name>kaptcha.border</param-name><param-value>no</param-value></init-param><init-param><param-name>kaptcha.textproducer.char.length</param-name><param-value>4</param-value></init-param><init-param><param-name>kaptcha.textproducer.char.string</param-name><param-value>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789</param-value></init-param><init-param><param-name>kaptcha.background.clear.to</param-name><param-value>211,229,237</param-value></init-param><init-param><!-- session.setAttribute("captcha","验证码") --><param-name>kaptcha.session.key</param-name><param-value>captcha</param-value></init-param>
</servlet>
<servlet-mapping><servlet-name>cap</servlet-name><!-- 请求如下地址,就能获取一个验证码图片 --><url-pattern>/captcha</url-pattern>
</servlet-mapping>

3、vue登录页面

4、后端代码

String kaptchaExpected = (String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
System.out.println("session中获取的验证码:"+kaptchaExpected);
String kaptchaReceived = request.getParameter("code");
System.out.println("前端提交的验证码:"+kaptchaReceived);

4、登录请求

5、打印输出

解决办法:

最后发现是获取session的键值对写错了,把

com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY改为setAttribute对应的key,我的是web.xml中帮我创建放到session中了,键值对为captcha。

如果没在web.xml中配置,则要自己手动创建,参考这篇文章:http://t.csdn.cn/iCgqu

成功获取

总结:

1、前后端都没有配置// axios.defaults.withCredentials=true//

allow-credentials="true"

允许跨域时携带cookie,但是仍然可以访问到session中的值,说明是不是使用的同一个session,这个我还没有验证,有大佬可以验证一下。

2、验证码得刷新session中才能获取,如果保持旧的验证码获取session为空。

3、如果没有配置setAttribute放到session中,则getAttribute后面就填我上面过程第4步的代码,自己没有设置键值对,就用谷歌默认的键值对,也能获取到session中的值。

4、写得不好大佬多多指出,我不懂的还有好多好多。

参考文章: 基于ssm实现验证码功能 - 默小希 - 博客园 (cnblogs.com)

ssm获取session中验证码值为null问题相关推荐

  1. html中加session,Html中如何获取session中的值(如登录后显示XX欢迎您!)

    话不多说,直接切入正题. 相信大家经常在各大网站上,登录过自己的帐号吧,那么就一定应该见过在点击登录之后,会发现在top的顶部状态栏中或是页面中央显示着 "xx欢迎您!"之类的语句 ...

  2. JSTL获取session中的值

    2019独角兽企业重金招聘Python工程师标准>>> 场景:购物车 以下为购物车部分代码: shopCart = new HashMap<String, Goods>( ...

  3. js获取php页面session的值,在html页面中取得session中的值的方法

    1.首先呢session的key-value都是存在server的,浏览器HTML页面是没有办法直接取得session中的值,只有在html里能通过js拿到jesessionid之类的东西. 1.1. ...

  4. QTP的那些事--通过WMI获取session中的用户信息的验证码

    代码如下:获取相应的session中的值 strComputer = "." Set objWMI = GetObject("winmgmts:" _ & ...

  5. vue获取div中的值_vue获取内存中的值并写入

    发表评论 发表评论 第{{i+1}}楼  匿名用户  发表时间:{{item.id|dateFormat}} {{item.content}} 加载更多 export default{ data(){ ...

  6. pandas获取dataframe中索引值最大值所在的数据行(get dataframe row of max index value)

    pandas获取dataframe中索引值最大值所在的数据行(get dataframe row of max index value) 目录 pandas获取dataframe中索引值最大值所在的数 ...

  7. 获取数组中元素值为偶数的累加和与元素值为奇数的累加和,并计算他们之间的差值

    /*** 1.获取数组中元素值为偶数的累加和与元素值为奇数的累加和,并计算他们之间的差值* 1.定义int getNum(int[] arr)静态方法,该方法要求完成* 1.1 获取指定数组arr中元 ...

  8. php获取数组中的全部可以吗,php获取数组中所有值的方法

    php的数组操作函数array_values 可以提取一个数组中所有元素值,具体的使用方法,可以参考下面的教程. array_values() 函数的作用是返回数组中所有元素的值,使用起来非常简单,只 ...

  9. Jquery获取列表中的值和input单选、多选框控制选中与取消

    一.Jquery获取列表中的值 1.jsp页面代码 <tbody><c:forEach var="model" items="${listRefEnti ...

最新文章

  1. nrf52840 gpiote如何配置中断输入_51单片机外部中断点亮LED
  2. POJ 3233 Matrix Power Series 矩阵快速幂 + 二分
  3. Java 性能优化实战记录(2)---句柄泄漏和监控
  4. ci mysql 转义,CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
  5. from server sql 拼接统计两个子查询_[SQL SERVER系列]之嵌套子查询和相关子查询
  6. java tostring的用处_JAVA的tostring()方法的作用是什么呢?
  7. Javascript学习历程之事件
  8. 深度学习-从感知器到LSTM(目的是处理序列问题)
  9. m7405d粉盒清零方法_联想打印机 多功能一体机全系列硒鼓清零方法
  10. 我是主考官__博文(作者著有《Java程序员,上班那点事儿》)
  11. react获取当前路由
  12. 在Ubuntu 20.04上面搭建嵌入式开发环境
  13. 图解网络:组建一个网络需要哪些网络设备和安全设备
  14. 【XSY3490】线段树(广义线段树,树上莫队)
  15. 数据分析 --- 收集数据的技巧
  16. http协议中get和post的区别(转)
  17. Geoffrey Hinton获得时间检验奖;AI预测世界杯荷兰夺冠;Galactica不靠谱,ChatGPT又如何……...
  18. Win98 源代码(特别版)
  19. 黑客入门很难吗?这一篇保证你学的明明白白
  20. Maven Download Sources 失败

热门文章

  1. MetroIn双经纬仪测量系统操作指南
  2. awd的批量脚本 pwn_[原创]第一届护网杯线下决赛awd之shell多解
  3. 2020年Notes补丁最新方法(SAP数字签名Notes解决方案说明)
  4. Spring-Boot 整合MongoDB
  5. 物联网 探秘零售业的“芯”机遇
  6. 美国国家标准与技术研究院定义云计算机的,Mell, P. and Grance, T., 美国国家标准与技术研究所(NIST) (2011) NIST关于云计算的定义....
  7. 海关计算机审计的回顾和展望
  8. Android定位百度地图
  9. 七周七语言之IO学习笔记
  10. 菜鸟的初行动——学校某代码评测服务器攻略战