• maven_SSM项目如何实现验证码功能


    验证码的作用

    防止恶意注册,自动化程序批量注册。防止暴力破解。

    1、这里我们使用goole的验证码生成器

    由于直接在maven中引入依赖,没有找到。所以只能直接去下载jar包了。

    链接:https://pan.baidu.com/s/1KANhJKI4sQCfkiroTVr0WA?pwd=29iv 
    提取码:29iv 
    这里是我下载好的,kaptcha-2.3.2.jar
    下载好之后,将它添加到本地仓库

    mvn install:install-file -Dfile=${下载jar包路径} -DgroupId=com.google.code.kaptcha -DartifactId=kaptcha -Dversion=2.3.2 -Dpackaging=jar

    参考:一个Maven实现的验证码模块_Zachary1994的博客-CSDN博客


    添加到本地仓库后,我们就可以在pom.xml中引入依赖了:

     2、接下来就是配置了

    applicationContext.xml

    1. <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
    2. <property name="config">
    3. <bean class="com.google.code.kaptcha.util.Config">
    4. <constructor-arg>
    5. <props>
    6. <prop key="kaptcha.border">noprop>
    7. <prop key="kaptcha.image.width">200prop>
    8. <prop key="kaptcha.image.height">50prop>
    9. <prop key="kaptcha.textproducer.char.string">abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890prop>
    10. <prop key="kaptcha.textproducer.char.length">4prop>
    11. <prop key="kaptcha.textproducer.font.size">40prop>
    12. <prop key="kaptcha.textproducer.font.color">blackprop>
    13. <prop key="kaptcha.textproducer.char.space">5prop>
    14. <prop key="kaptcha.noise.color">blackprop>
    15. props>
    16. constructor-arg>
    17. bean>
    18. property>
    19. bean>

    springmvc的基础配置,前端控制器等就不说了

    然后写controller

    1. @Controller
    2. public class CaptchaController {
    3. @Autowired
    4. private Producer captchaProducer;
    5. @GetMapping("/captcha")
    6. public void getCaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
    7. // 生成验证码文本
    8. String captchaText = captchaProducer.createText();
    9. // 将验证码文本存储在 Session中
    10. HttpSession session = request.getSession();
    11. session.setAttribute("captcha", captchaText);
    12. // 生成验证码图片
    13. BufferedImage captchaImage = captchaProducer.createImage(captchaText);
    14. // 将验证码图片输出到响应
    15. ServletOutputStream outputStream = response.getOutputStream();
    16. //该方法将验证码图像以JPG格式写入输出流
    17. ImageIO.write(captchaImage, "jpg", outputStream);
    18. outputStream.flush();
    19. outputStream.close();
    20. }
    21. @RequestMapping("/verification")
    22. @ResponseBody
    23. public String verification(String verification,HttpSession session){
    24. String captcha = (String) session.getAttribute("captcha");
    25. // System.out.println(captcha+"_"+verification);
    26. if(!verification.equals(captcha)){
    27. return "false";
    28. }else{
    29. return "true";
    30. }
    31. }
    32. }

    一个方法是生成验证码并相应到客户端,一个方法是后台验证(这里前端我是使用的ajax) 

    前端

    1. <div class="form-row">
    2. <input type="text" id="verification" name="verification" required><span class="verification-icon">span>
    3. <img src="${pageContext.request.contextPath}/captcha" alt="验证码" id="ka"/><img src="${pageContext.request.contextPath}/status/images/reset.png" id="reset" alt="刷新" title="刷新"/>
    4. div>

     这里使用img标签的src属性直接请求controller将验证码显示。后面是一个刷新图片,要实现刷新验证码功能,这里使用JQuery为它绑定点击事件,通过更新src属性实现刷新

    1. // 获取刷新图片元素
    2. let resetImage = $("#reset");
    3. // 绑定点击事件
    4. resetImage.on("click", function() {
    5. refreshCaptcha();
    6. });
    7. // 刷新验证码函数
    8. function refreshCaptcha() {
    9. // 获取验证码图片元素
    10. let captchaImage = $("#ka");
    11. // 生成新的验证码URL
    12. let captchaUrl = contextPath + "/captcha?" + new Date().getTime();
    13. // 更新验证码图片的src属性
    14. captchaImage.attr("src", captchaUrl);
    15. }

    至于验证码验证,我上面controller已经写好了验证方法,我是在验证码文本框失去焦点时使用ajax请求对验证码进行验证。这里可以通过自己的想法去调整更改。

  • 相关阅读:
    2.1.6 面向对象:一切皆对象(Python)
    redirect导致的循环重定向问题(史上最全)
    AppInfo应用信息查看V1.0.2测试版
    Android系统“使用其他文件打开”列表中包含自己的app
    Hdfs存储策略
    Python协程(asyncio)(二)高级开发
    ES6中set、map、DOM classList的基础用法
    山西电力市场日前价格预测【2023-10-29】
    Java排序算法之希尔排序
    关于nodejs调用c/c++代码的一些感悟
  • 原文地址:https://blog.csdn.net/m0_73288917/article/details/130839411