SpringBoot使用Captcha生成验证码

yizhihongxing

下面是SpringBoot使用Captcha生成验证码的完整攻略。

1. 引入依赖

pom.xml文件中引入Captcha依赖:

<dependency>
    <groupId>com.github.yingzhuo</groupId>
    <artifactId>captcha</artifactId>
    <version>0.5.0</version>
</dependency>

2. 生成验证码

在Controller里编写如下代码来生成验证码:

@GetMapping("/captcha")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
    // 设置响应头信息
    response.setContentType("image/png");
    response.setHeader("Cache-Control", "no-cache");

    // 获取验证码
    Captcha captcha = new Captcha.Builder(200, 50) // 设置图片大小
            .addText() // 添加文字验证码
            .addNoise(new StraightLineNoiseProducer()) // 添加干扰线
            .addNoise(new CircleNoiseProducer(Color.WHITE)) // 添加干扰噪音
            .addBackground(new GradiatedBackgroundProducer()) // 添加背景
            .build(); 

    // 将验证码保存到Session中
    request.getSession().setAttribute("captcha", captcha.getAnswer());

    // 将生成图片输出到响应流中
    ImageIO.write(captcha.getImage(), "png", response.getOutputStream());
}

3. 校验验证码

用户填写完成后,需要对验证码进行校验,校验代码如下:

@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password, 
        @RequestParam String verifyCode, HttpSession session) {
    if (!session.getAttribute("captcha").toString().equalsIgnoreCase(verifyCode)) {
        // 验证码输入错误
        return "redirect:/login?error";
    }
    // 验证码输入正确,进行登录校验
    ...
}

示例一:使用Thymeleaf模板

假设我们现在需要在登录页面上面加入验证码输入框,代码如下:

<form th:action="@{/login}" th:method="POST">
    <div>
        <label>用户名:</label>
        <input type="text" name="username">
    </div>
    <div>
        <label>密码:</label>
        <input type="password" name="password">
    </div>
    <div>
        <label>验证码:</label>
        <input type="text" name="verifyCode">
        <img id="captcha_img" src="/captcha" alt="验证码">
        <a href="javascript:;" onclick="changeImg()">看不清,换一张</a>
    </div>
    <button type="submit">登录</button>
</form>

其中,/captcha为生成验证码的请求地址。

为了使“看不清,换一张”功能正常使用,我们添加了一个JavaScript函数,用于动态改变验证码的图片。

function changeImg() {
    var imgNode = document.getElementById("captcha_img");
    imgNode.src = "/captcha?t=" + new Date().getTime();
}

这个函数会更改/captcha请求后面的时间戳,从而使浏览器重新请求验证码。

示例二:使用Angular框架

代码如下:

<div ng-controller="LoginController">
    <form ng-submit="login()">
        <div>
            <label>用户名:</label>
            <input type="text" ng-model="username">
        </div>
        <div>
            <label>密码:</label>
            <input type="password" ng-model="password">
        </div>
        <div>
            <label>验证码:</label>
            <input type="text" ng-model="verifyCode">
            <img ng-src="{{captchaUrl}}">
            <a href="javascript:;" ng-click="refreshCaptcha()">看不清,换一张</a>
        </div>
        <button type="submit">登录</button>
    </form>
</div>

其中,LoginController的代码如下:

app.controller("LoginController", function($scope, $http) {
    $scope.login = function() {
        $http.post("/login", {
            username: $scope.username,
            password: $scope.password,
            verifyCode: $scope.verifyCode
        }).then(function(response) {
            console.log(response.data);
        });
    };

    $scope.refreshCaptcha = function() {
        var time = new Date().getTime();
        $scope.captchaUrl = "/captcha?t=" + time;
    };

    $scope.refreshCaptcha();
});

其中,$http用于向后台发送POST请求。refreshCaptcha函数用于更改图片的URL,从而使浏览器重新请求验证码。

以上就是SpringBoot使用Captcha生成验证码的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot使用Captcha生成验证码 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java 下数据业务逻辑开发技术 JOOQ 和 SPL

    Java 下数据业务逻辑开发技术 JOOQ 和 SPL 的完整攻略 JOOQ(Java Object Oriented Querying)是一个 Java 版本的关系型数据库操作工具,它可以让用户使用 Java 对象和方法进行 SQL 查询和更新操作,JOOQ 可以解决 SQL 代码繁琐、难以维护、不能重用等问题。而 SPL(Stored Procedure…

    Java 2023年5月19日
    00
  • Extjs407 getValue()和getRawValue()区别介绍

    “Extjs407 getValue()和getRawValue()区别介绍”的攻略如下: 概述 在ExtJS 4.0.7中,getValue()和getRawValue()都是从表单控件中获取值的方法。但是,它们之间还是有一些区别的。 getValue() getValue() 方法返回表单控件的解析值,通常情况下是一个数字或字符串。 例如,使用getVa…

    Java 2023年6月16日
    00
  • java如何使用Lombok更优雅地编码

    Java开发中,有很多操作都是重复而无聊的,例如get/set方法的编写。通过使用Lombok,可以在编码时更加优雅,省去这些重复的部分。下面是Java如何使用Lombok更优雅地编码的完整攻略: 1. 安装Lombok 首先在Maven中,添加Lombok的依赖: <dependency> <groupId>org.projectl…

    Java 2023年5月20日
    00
  • 详解Windows下调整Tomcat启动参数的实现方法

    详解Windows下调整Tomcat启动参数的实现方法步骤如下: 一、了解Tomcat启动参数 Tomcat启动参数是在启动Tomcat时传递给JVM的参数。例如,-Xmx512m是告诉JVM将内存限制为512MB。 二、在Windows下调整Tomcat启动参数 在Windows下调整Tomcat启动参数的方法有以下几个步骤: 1. 打开cmd命令行窗口 …

    Java 2023年5月19日
    00
  • Java语言面向对象编程思想之类与对象实例详解

    Java面向对象编程思想之类与对象实例详解 在Java中,所有的事物都是对象,对象都有其自身的特征和行为。因此,Java是一种面向对象的语言。在Java中,类和实例是很重要的概念,我们需要对其进行深入的学习和理解。 类和对象 类是一种模板或蓝图,可以用来创建对象。具有相同属性和行为的对象,可以归纳为同一个类。对象则是类的一个实例,可以根据类来创建多个对象。 …

    Java 2023年5月26日
    00
  • Spring Boot 之HelloWorld开发案例

    下面我将为大家详细讲解“SpringBoot之HelloWorld开发案例”的完整攻略。首先,我们需要了解一些SpringBoot的基础知识。 SpringBoot是一个快速开发框架,它使开发者可以快速地创建基于Spring的应用程序。SpringBoot通过自动化配置来简化Spring应用程序的初始搭建,同时可以轻松集成第三方库、插件等。 接下来,我们将详…

    Java 2023年5月15日
    00
  • Java Lambda表达式详解

    Java Lambda表达式详解 什么是Lambda表达式? Lambda表达式是JDK8引入的一种新的语言特性,主要用于简化Java中的匿名内部类的使用。Lambda表达式本质上是一种匿名函数,实现了函数式编程的思想。 Lambda表达式的语法 Lambda表达式的基本语法如下: (parameters) -> expression 或 (param…

    Java 2023年5月20日
    00
  • spring boot集成pagehelper(两种方式)

    下面我会详细讲解Spring Boot集成PageHelper的两种方式及相应的示例。 方式一:使用PageHelper Starter 第一步:在pom.xml文件中添加以下依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId&g…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部