Spring WebFlux实现获取验证码请求接口?

  如果你想让请求处理器返回验证码信息,你可以在处理器函数中生成验证码,并将其作为响应返回给客户端。以下是一个简单的示例,使用 Spring WebFlux 框架生成一个包含随机生成的验证码的图片,并将其作为响应返回给客户端,代码如下所示。

import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;import static org.springframework.web.reactive.function.server.RouterFunctions.route;
import static org.springframework.web.reactive.function.server.ServerResponse.ok;public class CaptchaHandler {public RouterFunction<ServerResponse> captchaRoute() {return route().GET("/captcha", this::generateCaptcha).build();}private Mono<ServerResponse> generateCaptcha(ServerRequest request) {// Generate random captcha stringString captcha = generateRandomCaptcha();// Generate captcha imageBufferedImage image = generateCaptchaImage(captcha);// Convert image to byte arrayByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();try {ImageIO.write(image, "png", byteArrayOutputStream);} catch (IOException e) {return ServerResponse.badRequest().build();}// Return image as responsereturn ok().contentType(MediaType.IMAGE_PNG).bodyValue(byteArrayOutputStream.toByteArray());}private String generateRandomCaptcha() {// Generate random captcha stringRandom random = new Random();StringBuilder captcha = new StringBuilder();for (int i = 0; i < 6; i++) {captcha.append((char) (random.nextInt(10) + '0')); // Random digit}return captcha.toString();}private BufferedImage generateCaptchaImage(String captcha) {// Generate captcha imageint width = 120;int height = 40;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D graphics = image.createGraphics();// Set background colorgraphics.setColor(Color.WHITE);graphics.fillRect(0, 0, width, height);// Set text colorgraphics.setColor(Color.BLACK);graphics.setFont(new Font("Arial", Font.PLAIN, 20));// Draw captcha textgraphics.drawString(captcha, 20, 30);// Add noise (optional)// ...// Dispose graphicsgraphics.dispose();return image;}
}

  在这个示例中,generateCaptcha 方法生成一个随机的验证码字符串,然后generateCaptchaImage 方法使用生成的验证码字符串创建一个验证码图片。最后,使用 ServerResponse.ok().contentType(MediaType.IMAGE_PNG).bodyValue 将验证码图片作为响应返回给客户端。

  你可以将这个处理器注册到你的 Spring WebFlux 应用程序中,并在浏览器中访问 /captcha 路径来获取验证码图片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea-自我常见配置

1. 主题配置 2. 显示方法分隔符 Editor->General->Appearance 3. 忽略大小写提示 Editor->General->Code Completion 4. 自动导包 Editor->general->Auto Import 5. 取消单行显示Tabs Editor->General->Editor Tabs 效果如下图&#xff1a; 6. 设置…

HarmonyOS NEXT星河版之美团外卖点餐功能实战(下)

文章目录 一、购物车逻辑1.1 购物车及加减菜1.2 菜品的加减---方案一1.3 菜品的加减---方案二1.4 购物车View完善1.5 清空购物车1.5 购物车数量和价格 二、小结 一、购物车逻辑 1.1 购物车及加减菜 在utils目录下新建CartStore.ets文件&#xff0c;如下&#xff1a; import …

Vue3的CRUD模版(附Demo)

目录 前言模版 前言 用惯Vue2之后&#xff0c;在碰Vue3后&#xff0c;整体还是有所区别 此文主要做一个回顾总结 假设界面如下&#xff1a; 可CRUD&#xff0c;对应的新增 添加一些必选项&#xff1a; 其中数据库的设计如下&#xff1a; 模版 对应需要注意参数位置、初始…

(41)5.6-5.8数据结构(栈和队列的应用和数组)

1.栈在括号匹配中的应用 #define _CRT_SECURE_NO_WARNINGS #define MaxSize 10 typedef struct { char data[MaxSize];//静态数组存放栈中元素 int top; //栈顶指针 }SqStack;//初始化栈 void InitStack(SqStack& S);//判断栈是否为空 bool StackEmpty(SqStack S…

Feign 第一次调用为什么会很慢?

feign调用的大致过程&#xff1f; Feign进行远程调用的&#xff0c;这里面包括&#xff0c;注册中心、负载均衡、FeignClient之间的关系&#xff0c;微服务通过不论是eureka、nacos也好注册到服务端&#xff0c;Feign是靠Ribbon做负载的&#xff0c;而Ribbon需要拿到注册中心的…

从零开始构建现代深度学习框架:数据支持、网站链接与代码步骤

文章目录 一、数据支持二、网站链接三、代码步骤1. 导入必要的库和模块2. 加载和预处理数据&#xff08;以MNIST为例&#xff09;3. 定义模型结构4. 编译模型5. 训练模型6. 评估模型 一、数据支持 在构建深度学习框架的过程中&#xff0c;数据是不可或缺的。以下是一些可能用到…

android进阶-Binder

参考&#xff1a;Android——Binder机制-CSDN博客 机制&#xff1a;Binder是一种进程间通信的机制 驱动&#xff1a;Binder是一个虚拟物理设备驱动 应用层&#xff1a;Binder是一个能发起进程间通信的JAVA类 Binder相对于传统的Socket方式&#xff0c;更加高效Binder数据拷贝…

JavaScript的未来发展趋势,探索JavaScript中最新技术(JavaScript可视化编程到服务端渲染)

简介&#xff1a;JavaScript生态系统是一个充满机遇的领域&#xff0c;它从创造性的可视化编程到高效的服务端渲染&#xff0c;它的的技术生态系统正在迅速演变&#xff0c;相关技术一直处于不断发展的前沿。这里将带您深入探索目前 JavaScript 中最近最火的技术趋势&#xff0…

类(Classes)在TypeScript中的使用:面向对象编程的基石

类&#xff08;Classes&#xff09;在TypeScript中的使用&#xff1a;面向对象编程的基石 引言 类&#xff08;Classes&#xff09;是TypeScript中实现面向对象编程&#xff08;OOP&#xff09;的核心概念之一。它们允许你通过封装、继承和多态性来构建复杂的应用。本文将深入…

为什么人力资源(HR)工资低?原因在这

为什么做人力资源的&#xff0c;工资都很低&#xff1f; 对于HR工资低的问题&#xff0c;最需要讨论的部分是——HR 究竟有什么价值&#xff1f; 有很多人没想过但会遇到的困惑&#xff1a; 一、为什么人事工资那么低&#xff1f; 同理&#xff0c;也有很多人不明白自己为什…

MyBatis 一对多查询(联合查询 ResultMap 映射 和 子查询映射)

前言&#xff1a; 在数据库操作中&#xff0c;我们可能习惯了单表、连表操作&#xff0c;突然然你来进行一对多操作&#xff0c;你还会吗&#xff1f; 什么是一对多&#xff1f; 一对多是最基础的表关系&#xff0c;简单来说就是 A 表中的一条数据对应 B 表中的多条数据&…

豆芽机置入语音芯片WTN6040-8S:开启智能生活新篇章,让豆芽制作更便捷有趣

豆芽机的开发背景&#xff1a; 豆芽作为一种营养丰富、味道鲜美的食品&#xff0c;深受广大消费者的喜爱。然而&#xff0c;传统的豆芽生产过程繁琐&#xff0c;需要耗费大量的时间和人力&#xff0c;且存在生产效率低、质量不稳定等问题。随着人们生活节奏的加快和对健康饮食的…

DataLab-数据分析的Ai辅助工具

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;DataLab是一个由DataCamp提供的强大在线数据分析平台&#xff0c;它通过AI技术简化了数据处理流程&#xff0c;使得用户无需编程或数据分析的高级技能即可快速获取数据洞察。它支持多种数据源&#xff0c;包…

C++多态实现原理详解

阅读引言&#xff1a; 我想象了一下&#xff0c; 假如人有突然问我什么是多态&#xff0c; 我该如何给别人说清楚呢&#xff1f;所以写下这篇文章&#xff0c; 希望大家看完有所收获。 ①. 开胃小菜 先看这样一个开胃小菜 这里我有点小小的疑惑&#xff0c; 大小为啥是1。 在C…

Python | Leetcode Python题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:row,col len(matrix),len(matrix[0])row_l,row_r 0,row-1while row_l < row_r:m (row_lrow_r)//2if target < matrix[m][0]:row_r m-1…

微信小程序开发秘籍:无缝集成微信登录功能

微信小程序开发秘籍&#xff1a;无缝集成微信登录功能 在微信生态内开发小程序&#xff0c;无缝集成微信登录功能是提升用户体验、实现用户身份管理的关键一步。本篇文章将带你深入探索如何在微信小程序中实现一键登录&#xff0c;从基础概念到代码实战&#xff0c;每一步都力…

impdp 高级用法

1.从现有的测试库上导出表结构数据&#xff0c;导入到目标库&#xff0c;除去索引和约束&#xff1b;没有索引和约束的额外开销&#xff0c;单纯导数据会很快。 2.现有生产库上数据导出&#xff0c;尽可能采用高并发&#xff1b;考虑到新旧服务器CPU核数较多&#xff0c;准备采…

协智优能技术负责人15-20K面经

这家公司是初创公司&#xff0c;一个小办公室&#xff0c;面试体验还不错&#xff0c;面试流程&#xff1a;1、进去先做笔试题&#xff0c;笔试题有前端&#xff0c;ai&#xff0c;java&#xff0c;小程序&#xff0c;开发流程 2、然后是面试官面试 【笔试题】 1、session和coo…

使用 Docker 部署 VS Code in The Browser

1&#xff09;介绍 GitHub&#xff1a;https://github.com/coder/code-server 在日常学习工作中&#xff0c;Vscode 已成为我们首选的代码编辑器。然而&#xff0c;其局限性在于当我们从家到公司移动时&#xff0c;难以保持连续的编码体验。针对这一痛点&#xff0c;虽然市面上…

oracle 数据库与服务、实例与SID、表空间、用户与表模式

一、数据库与数据库服务: 概念:就是一个数据库的标识,在安装时就要想好,以后一般不修改,修改起来也麻烦,因为数据库一旦安装,数据库名就写进了控制文件,数据库表,很多地方都会用到这个数据库名。是数据库系统的入口,它会内置一些高级权限的用户如SYS,SYSTEM等。我们…