前端——》easy-captcha验证码的使用

2023-05-16

在网上看到一个很方便的验证码插件:easy-captcha 。使用效果如下。

使用步骤:

1.导入依赖

<!--图形验证码-->
    <dependency>
      <groupId>com.github.whvcse</groupId>
      <artifactId>easy-captcha</artifactId>
      <version>1.6.2</version>
    </dependency>

 

2.后端生成验证码并输出给前端(前端加载时请求此接口)

@ApiOperation(value = "获取验证码")
    @RequestMapping("v1/captcha")
    public void captcha(javax.servlet.http.HttpServletRequest request, HttpServletResponse response) throws Exception {

        // 设置请求头为输出图片类型
        response.setContentType("image/gif");
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);

        //字母类型
        //SpecCaptcha captcha = new SpecCaptcha(130, 48, 4);

        // 中文gif类型
        //ChineseGifCaptcha captcha = new ChineseGifCaptcha(130, 48);

        // 中文类型
        //ChineseCaptcha captcha = new ChineseCaptcha(130, 48);

        // 算术类型
        ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 48); // 图片的宽高
        captcha.setLen(2);  // 几位数运算,默认是两位
        captcha.getArithmeticString();  // 获取运算的公式:3+2=?
        captcha.text();  // 获取运算的结果:5

        //验证码存入session或存入redis
        //存redis通过UUID.randomUUID()生成key,specCaptcha.text().toLowerCase()生成value,存入redis并将key返回给前端,在登录时从redis中获取并验证
        //存session则如下,
        request.getSession().setAttribute("captcha", captcha.text().toLowerCase());
        // 输出图片流
        captcha.out(response.getOutputStream());
    }

我默认使用的算术类型的验证码。另外由于接口 有jwt的token校验,但是验证码的接口是不需要token校验的,所以我把生成验证码的接口的拦截去掉,

在springboot的配置文件中加入:

jwtp.exclude-path=/v1/captcha

3.前端接收验证码

<div class="layui-inline">
     <div class="layui-input-inline">
          <input name="verCode" class="layui-input" lay-verify="required" placeholder="验证码" type="text">
     </div>
     <div class="layui-input-inline">
          <img src="/v1/captcha" id="verCodeImg" width="120px" height="48px"/>
     </div>
</div>

 点击验证码图片,刷新验证码的js

//刷新验证码
$('#verCodeImg').click(function flushVerCode() {
   this.src = this.src + "?" + Math.random();
});

 点击登录后,关于验证码相关的代码,

function doLogin(field) {
            layer.load(2);
            admin.req('login', field, function (res) {
                layer.closeAll('loading');
                if(res.message=="验证码错误"){
                    /*-------关键代码------start*/
                    layer.msg(res.message, {icon: 5});
                    /*刷新验证码*/
                    var verCodeImg = $('#verCodeImg');
                    var src = verCodeImg.prop('src');
                    verCodeImg.prop('src', src + "?" + Math.random());
                    return false;
                    /*-------关键代码------end*/
                }else{
                    /*登录成功则做其他操作*/
                }
            }, 'POST');
        }

 4.后端验证码校验

import com.fasterxml.jackson.databind.ObjectMapper;
import com.wf.captcha.utils.CaptchaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * 请求过滤类
 **/
@Component
public class ValidateCodeFilter extends OncePerRequestFilter {

    @Autowired
    private ObjectMapper objectMapper;

    @Override
    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
        /*如果请求的url是登录的接口,则进行验证码校验*/
        if (StringUtils.pathEquals("/v1/login", httpServletRequest.getRequestURI())) {
            String verCode = httpServletRequest.getParameter("verCode");
            if (!CaptchaUtil.ver(verCode, httpServletRequest)) {
                Map<String, Object> map = new HashMap<>();
                map.put("message", "验证码错误");
                httpServletResponse.setContentType("application/json;charset=UTF-8");
                httpServletResponse.getWriter().write(objectMapper.writeValueAsString(map));
                return;
            }
        }
        filterChain.doFilter(httpServletRequest, httpServletResponse);
    }
}

 

到此为止,这个验证码的使用就结束了,比较方便。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端——》easy-captcha验证码的使用 的相关文章

  • 我的第二篇博客(vue中的瀑布流插件 vue-waterfall-easy)

    vue waterfall easy是一款很好的瀑布流插件 以下是代码 转载自GitHub的官方文档 https github com lfyfly vue waterfall easy 以下是代码 span class token ope
  • 为nodejs创建验证码

    我正在尝试在网站的注册页面上放置验证码 如何在 Node js 中显示验证码 我找到了一个用纯js编写的聪明的 验证码 Features 只生成数字验证码PNG图像 内置字体 字符上下 左右限位 随机位移 完整的 JavaScript 它会
  • Scrapy 带有动态验证码

    我正在尝试打破一个captcha在网站的表单中 但此验证码是动态的 它没有 URL 而是有类似这样的内容 src captcha accion image 这里最好的选择是什么 我读过类似使用中间件之类的东西 我也知道它可以用 Seleni
  • 纯 JavaScript/jQuery/HTML 验证码

    有人可以给我发一个链接 或者给我提供一个纯 Javascript jQuery 验证码的示例吗 因为我可以看到很多 PHP C 后端的示例 但我只需要 Javascript 谢谢 我认为这不是一个好主意 因为如果在客户端 js 中进行验证
  • 用 PHP 解决验证码问题?个人挑战?

    我想看看我是否可以使用 PHP 解决验证码 以应对一些个人挑战 没什么太难的 同一行中的单词 始终使用相同颜色的单词等 这是一个示例 http www simplyshows com img jpg 只是想看看会有多难 我的问题是 是否有基
  • imagettftext() - 找不到字体位置

    我正在使用 imagettftext 函数创建自定义验证码脚本 我已在运行 PHP 版本 5 3 8 的 PC 上成功运行并测试了代码 但是当我上传到运行 PHP 版本 5 2 17 的共享托管帐户时 出现以下错误 Warning imag
  • 在 ember js 和 mvc 中使用验证码

    我正在使用创建一个网站ember js and asp net mvc 在我之前的asp net我用过的网站captchaMVC http captchamvc codeplex com http captchamvc codeplex c
  • 抓取大量带有 url 的 Google Scholar 页面

    我正在尝试使用 BeautifulSoup 从 Google 学者的作者那里获取所有出版物的完整作者列表 由于作者的主页只有每篇论文的作者列表 因此我必须打开论文的链接才能获取完整列表 结果 我每隔几次尝试就会遇到验证码 有没有办法避免验证
  • 如何识别这些图像中字母的颜色?

    我在用本文 https code msdn microsoft com windowsdesktop Solving Captcha with C dadf37cd解决验证码问题 它的工作原理是使用 AForge 从图像中删除背景 然后将
  • 检测颜色并从图像中删除该颜色

    我的图像背景为浅紫色图像 字符为深蓝色 我的目标是从图像中识别文本 所以我试图从背景中删除浅紫色 以便我的图像没有噪音 但我找不到该图像的确切颜色代码 因为它在各处都有些不同 所以我无法遮盖图像 这是我的代码 import numpy as
  • PHP GD:图像无法显示,因为它包含错误

    我尝试通过 PHP GD 制作验证码 但不幸的是我遇到了一个问题 PHP 告诉我 The image http 127 0 0 1 par php cannot be displayed because it contains errors
  • Woocommerce Checkout 无法使用 WooCommerce 插件的无验证码 reCAPTCHA

    当我激活 No CAPTCHA reCAPTCHA for WooCommerce 插件时 因此在 WooCommerce 的结帐页面上 当客户检查 创建帐户 时复选框和下订单相比 它不起作用 页面只是滚动到顶部 没有任何操作 任何想法 问
  • PHP:从 javascript 重新加载验证码图像

    我有一个 PHP 中的用户注册表单 我将验证码图像检查放在页面中 我像这样使用它 img src captcha php alt Enter this text in the adjacent text box 在我的 javascript
  • 实用的非基于图像的验证码方法?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 看起来我们会添加CAPTCHA http en wikipedia org wiki Capt
  • 如何在 Yii-2 应用程序中添加验证码?

    我正在尝试将验证码添加到登录表单中 我的环境 Yii 2 PHP 5 4 45 版本 IIS 10 0 Windows 10 In login php LoginForm php and SiteController php我添加了以下内容
  • PRIMEFACES - 如何通过单击 刷新

    我正在考虑这个展示 http www primefaces org showcase ui dynamicImage jsf http www primefaces org showcase ui dynamicImage jsf特别是 动
  • 如何使用react-google-recaptcha重置Google recaptcha

    看起来谷歌验证码的工作方式是这样的 如果使用特定令牌进行了验证尝试 则无法再次使用它 文档指出 您将需要调用 grecaptcha reset 来要求最终用户再次使用 reCAPTCHA 进行验证 我正在尝试使用react google r
  • ASP.Net 注册表中的 MS Captcha 超时时间

    我目前在注册表中使用 MS Captcha 如果表格在一分钟内提交 效果就很好 但有时 在填写表单后 用户然后搜索要上传的文档 当他们最终提交表单时 他们会收到如下服务器错误 NullReferenceException 未将对象引用设置为
  • 在Puppeteer中进行网页抓取时如何处理验证码?

    我正在使用 Puppeteer 进行网页抓取 我刚刚注意到 有时 由于我通过计算机进行的访问量很大 我尝试抓取的网站会要求输入验证码 验证码形式如下所示 因此 我需要有关如何处理此问题的帮助 自从我使用 Express 和 EJS 将值发送
  • Rails 的 recaptcha 插件

    我目前正在使用 ambethia 的 Rails recaptcha 插件 我想禁用该消息 验证码错误 每当用户错误地输入错误的验证码时 我该怎么做呢 在源文件中 我得到了围绕错误消息的以下标签 p class recaptcha erro

随机推荐