SpringBoot使用Captcha生成验证码

下面是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分布式session存储解决方案图解

    Java分布式session存储是指将Web应用中的session数据存储在多个服务器上,从而实现应用服务器之间的session数据共享,以提高系统的可靠性和可伸缩性。常用的Java分布式session存储解决方案有以下几种: 基于Tomcat的分布式session存储解决方案 1. 安装Tomcat服务器 在多个服务器上安装Tomcat应用服务器,确保To…

    Java 2023年5月20日
    00
  • java基础之方法详解

    下面我将详细讲解“Java基础之方法详解”的完整攻略。 方法基础 在Java语言中,方法是一段可调用的独立代码块,用于完成特定的功能逻辑。在完整的Java程序中,每个方法都被封装在一个类中,方法被定义为类的成员变量。 方法的定义格式如下: [访问修饰符] [返回值类型] 方法名([参数列表]) { // 方法体 [return 返回值;] } 其中,访问修饰…

    Java 2023年5月19日
    00
  • spring-boot-starter-parent的作用详解

    “spring-boot-starter-parent”是一个Maven父项目,为Spring Boot应用程序的制作提供了标准化的模式和结构。它本身不提供任何功能,而是通过定义版本来简化Maven项目配置。 根据Spring Boot文档,使用“spring-boot-starter-parent”可以获得以下好处: 提供了默认的Maven设置,无需进行繁…

    Java 2023年5月20日
    00
  • 微信小程序实现上传照片代码实例解析

    下面我将为你介绍一份完整的“微信小程序实现上传照片代码实例解析”的攻略。 1. 目标描述 本攻略的目标是从零开始使用微信小程序实现上传照片的功能。在完成本攻略后,你将能够轻松地了解如何使用微信小程序上传照片,为自己的项目添加上传照片的功能。 2. 实现思路 实现上传照片功能的思路可以总结为以下几个步骤: 添加<input>元素,用于选择要上传的照…

    Java 2023年5月23日
    00
  • ArrayList及HashMap的扩容规则讲解

    1. ArrayList的扩容规则 ArrayList 是 Java 自带的动态数组容器,支持自动扩容。当在 arrayList 中添加元素时,如果当前的数组容量已满,则需要进行扩容。ArrayList 的默认初始容量是 10,扩容因子是 1.5 倍。也就是说,在当前容量满载时,会将容量扩大到 1.5 倍。 下面是 ArrayList 的扩容规则: 当添加元…

    Java 2023年5月26日
    00
  • 用JS动态设置CSS样式常见方法小结(推荐)

    关于用JS动态设置CSS样式的常见方法,可以有以下几种实现方式: 1. 通过 JavaScript 对样式表对象进行操作 可以获取到页面上所有的样式表的对象,通过修改其中的样式信息来实现动态设置 CSS 样式的效果。 var stylesheet = document.styleSheets[0]; // 获取样式表对象,假设是第一条样式表 var rule…

    Java 2023年6月15日
    00
  • 什么是应用程序类加载器?

    应用程序类加载器(Application Class Loader)是Java虚拟机(JVM)的一种类加载器,也是ClassLoader的子类,它负责从CLASSPATH环境变量中指定的路径或JAR文件加载类,通常也称为系统类加载器。 使用应用程序类加载器,需要遵循以下步骤: 获取应用程序类加载器 可以使用以下代码获取应用程序类加载器: ClassLoade…

    Java 2023年5月10日
    00
  • mysql connector 执行 select 和 shardingshpere-proxy 的处理过程

    use java mysql connector // fake mysql select code // … datasource init Connection conn = datasource.getConnection(); PreparedStatement pst = conn.prepareStatement(“select id, ta…

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