谷歌 recaptcha_在Spring Boot应用程序中使用Google reCaptcha

谷歌 recaptcha

介绍

Google的reCaptcha是一个库,用于防止漫游器将数据提交到您的公共表单或访问您的公共数据。

在本文中,我们将研究如何将reCaptcha与基于Spring Boot的Web应用程序集成

设置验证码

您应该从管理面板创建API密钥。 您必须创建一个示例应用程序,如下所示:

发布您应该能够看到密钥和机密以及一些足以入门的说明,如下所示:

创建示例Spring Boot应用

像往常一样,导航到start.spring.io并按如下所示填写并下载项目:

在您喜欢的IDE中打开,然后运行RecaptchaDemoApplication并从http:// localhost:8080访问该应用。 由于未定义控制器,因此您将看到错误。

使用表单创建公共页面

我们将利用:

  • 基于Bootstrap的主题
  • jQuery的
  • jQuery Form插件
  • jQuery验证插件
  • 敬酒通知
  • Fontawesome图标
  • Recaptcha JS

启用了reCaptcha的表单HTML是:

<form id="signup-form" class="form-horizontal" method="POST" th:action="@{/api/signup}" th:object="${user}"><div class="form-group"><label class="control-label required">First Name</label><input type="text" th:field="*{firstName}" class="form-control required" /></div><div class="form-group"><label class="control-label required">Last Name</label><input type="text" th:field="*{lastName}" class="form-control required" /></div><div class="form-group"><label class="control-label required">Email</label><input type="text" th:field="*{email}" class="form-control required" /></div><div class="form-group"><label class="control-label required">Password</label><input type="password" th:field="*{password}" class="form-control required" /></div><div class="form-group"><label class="control-label required">Confirm Password</label><input type="password" th:field="*{confirmPassword}" class="form-control required" /></div><div class="g-recaptcha" data-sitekey="6LdGeDcUAAAAALfoMZ2Ltv4EE6AHIYb8nSxhCRh_"></div><button type="submit" class="btn btn-primary">Submit</button></form>

上面重要的部分是具有g-recaptcha类的div ,它具有公共站点密钥。 另一个密钥应该在您的服务器中安全,您可以使用该密钥来验证来自Google服务器的验证码。 另外,请确保reCaptcha JS位于“。”之前。

加载URL http:// localhost:8080 /将呈现以下形式:

创建用于表单处理的API

接下来是在处理添加用户API时验证验证码。 Google提供了一个端点,我们将在该端点上发布以验证验证码。 以下是验证验证码的代码:

@Slf4j
@Service
public class RecaptchaService {@Value("${google.recaptcha.secret}") String recaptchaSecret;private static final String GOOGLE_RECAPTCHA_VERIFY_URL ="https://www.google.com/recaptcha/api/siteverify";@Autowired RestTemplateBuilder restTemplateBuilder;public String verifyRecaptcha(String ip, String recaptchaResponse){Map<String, String> body = new HashMap<>();body.put("secret", recaptchaSecret);body.put("response", recaptchaResponse);body.put("remoteip", ip);log.debug("Request body for recaptcha: {}", body);ResponseEntity<Map> recaptchaResponseEntity = restTemplateBuilder.build().postForEntity(GOOGLE_RECAPTCHA_VERIFY_URL+"?secret={secret}&response={response}&remoteip={remoteip}", body, Map.class, body);log.debug("Response from recaptcha: {}", recaptchaResponseEntity);Map<String, Object> responseBody = recaptchaResponseEntity.getBody();boolean recaptchaSucess = (Boolean)responseBody.get("success");if ( !recaptchaSucess) {List<String> errorCodes = (List)responseBody.get("error-codes");String errorMessage = errorCodes.stream().map(s -> RecaptchaUtil.RECAPTCHA_ERROR_CODE.get(s)).collect(Collectors.joining(", "));return errorMessage;}else {return StringUtils.EMPTY;}}}

我们创建了一个地图,该地图将响应代码与Google提供的响应消息进行映射,如下所示:

public class RecaptchaUtil {public static final Map<String, String> RECAPTCHA_ERROR_CODE = new HashMap<>();static {RECAPTCHA_ERROR_CODE.put("missing-input-secret", "The secret parameter is missing");RECAPTCHA_ERROR_CODE.put("invalid-input-secret", "The secret parameter is invalid or malformed");RECAPTCHA_ERROR_CODE.put("missing-input-response", "The response parameter is missing");RECAPTCHA_ERROR_CODE.put("invalid-input-response", "The response parameter is invalid or malformed");RECAPTCHA_ERROR_CODE.put("bad-request", "The request is invalid or malformed");}
}

让我们以api形式使用RecaptchaService ,如下所示:

@PostMapping("/signup")
public ResponseEntity<?> signup(@Valid User user, @RequestParam(name="g-recaptcha-response") String recaptchaResponse,HttpServletRequest request
){String ip = request.getRemoteAddr();String captchaVerifyMessage = captchaService.verifyRecaptcha(ip, recaptchaResponse);if ( StringUtils.isNotEmpty(captchaVerifyMessage)) {Map<String, Object> response = new HashMap<>();response.put("message", captchaVerifyMessage);return ResponseEntity.badRequest().body(response);}userRepository.save(user);return ResponseEntity.ok().build();
}

UI上的验证码通过键g-recaptcha-response作为响应参数传递到g-recaptcha-response 。 因此,我们使用此响应密钥和选项ip地址调用验证码验证服务。 验证的结果是成功还是失败。 如果消息失败,我们将捕获该消息并将其返回给客户端。

此示例的完整代码可以在这里找到。

翻译自: https://www.javacodegeeks.com/2017/11/using-google-recaptcha-spring-boot-application.html

谷歌 recaptcha

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

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

相关文章

数学建模python教材推荐_数模竞赛专攻python应该准备什么?

想起以前打开Matlab就不忍心关掉的阴影(无SSD打开及其慢)。没有什么非要二选一&#xff0c;喜欢哪个用哪个都行&#xff0c;两个都试试比一比也行&#xff0c;比赛更不会关心你的结果图哪儿来的(小孩才。。。大人全都。。。)。Matlab有Matlab的好处&#xff0c;非常成熟的软件包…

python中if __name__ == ‘__main__‘:的简单理解

举例说明&#xff0c;这里有两个模块 # ni模块 print("这是1.") if __name__ __main__:print("这是2.")输出结果: 这是1.这是2. #wo模块 import ni print("这是3.")输出结果: 这是1这是3 总结&#xff1a; 运行自己的模块时会运行if _…

Linux 命令之 wget -- 下载文件工具

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例&#xff08;一&#xff09;下载并以不同的文件名保存&#xff08;二&#xff09;下载单个文件&#xff08;三&#xff09;限速下载&#xff08;四&#xff09;断点续传&#xff08;五&#xff09;使用 wget 后台下载…

创建react应用程序_使用SpringWebFlux的React式Web应用程序

创建react应用程序1.React式编程简介 React式编程是为具有以下特征的应用程序创造的术语&#xff1a; 非阻塞应用 事件驱动和异步 需要少量线程来垂直扩展&#xff08;即在JVM中&#xff09; 就像面向对象的编程&#xff0c;函数式编程或过程式编程一样&#xff0c;React式…

获取当地天气_Mac 天气预报动态壁纸工具Living Weather HD 4.4.4

这款独特的非凡应用程序将天气呈现在您的桌面上&#xff0c;它能够预报天气状况&#xff0c;并在桌面上使用相应的美丽动态壁纸场景。 天气HD也可以用作屏保。 主要功能&#xff1a; ● 在桌面上了解世界各地当前的天气状况和未来状况 ● 与当前天气状况、今天或明天预报相应的…

Linux 命令之 curl 的选项(英文版)

Usage: curl [options...] <url> Options: (H) means HTTP/HTTPS only, (F) means FTP only--anyauth Pick "any" authentication method (H) 可以使用“任何”身份验证方法-a, --append Append to target file when uploading (F/SFTP) 上传文件…

获取文件夹下的文件名并存入txt中

import os path_imgsC:/Users/13451/Desktop/pic #图片存放的地址 for files in os.listdir(path_imgs): #listdir函数获取文件夹下图片的名字,返回包含所有文件名字的列表with open(C:/Users/13451/Desktop/train_data.txt,a) as f: f.write(files.rstrip(.png)) #只保存名…

javaparser_JavaParser生成,分析和修改Java代码

javaparser作为开发人员&#xff0c;我们经常鄙视手动进行重复工作的人员。 我们认为&#xff0c; 他们应该实现这一目标 。 尽管如此&#xff0c;我们还是进行与编码有关的所有活动。 当然&#xff0c;我们使用的高级IDE可以为我们执行一些重构&#xff0c;但这基本上就结束…

计算机系统组成_网络教育统考计算机应用基础题库(计算机系统的组成2)

点击蓝字关注我哦11在微型计算机的各种设备中&#xff0c;既用于输入又可用于输出的设备是____。A、磁盘驱动器B、键盘C、鼠标D、绘图仪点击空白处查看答案参考答案:A12计算机的硬件系统由五大部分组成&#xff0c;下列各项中不属于这五大部分的是______。A、运算器B、软件C、I…

深度学习基础实战使用MNIST数据集对图片分类

本文代码完全借鉴pytorch中文手册 我们找到数据集&#xff0c;对数据做预处理&#xff0c;定义我们的模型&#xff0c;调整超参数&#xff0c;测试训练&#xff0c;再通过训练结果对超参数进行调整或者对模型进行调整。 import torch import torch.nn as nn import torch.nn.f…

Linux 命令之 curl -- 文件传输工具/下载工具/网络接口调试

文章目录 一、命令介绍二、常用选项三、wget 与 curl 对比四、命令示例(一)以 post 方式提交数据/以 post 方式传递请求参数(二)查看网页的源码内容(三)保存访问的网页源码内容(四)将服务器的回应保存成文件/将输出保存成文件(五)显示 http response 头信息,打印出服…

python cookie使用_Python使用cookielib模块操作cookie的实例教程

cookielib是一个自动处理cookies的模块&#xff0c;如果我们在使用爬虫等技术的时候需要保存cookie&#xff0c;那么cookielib会让你事半功倍&#xff01;他最常见的搭档模块就是python下的urllib和request。核心类1.Cookie该类实现了Netscape and RFC 2965 cookies定义的cooki…

pytorch中unsqueeze()函数理解

unsqueeze()函数起升维的作用,参数表示在哪个地方加一个维度。 在第一个维度(中括号)的每个元素加中括号 0表示在张量最外层加一个中括号变成第一维。 直接看例子: import torch inputtorch.arange(0,6) print(input) print(input.shape) 结果&#xff1a; tensor([0, 1, 2, 3…

Linux 命令之 ifconfig -- 配置和显示网卡的网络参数

文章目录一、命令介绍二、常用选项三、参考示例&#xff08;一&#xff09;显示网络设备信息&#xff08;激活状态的&#xff09;&#xff08;二&#xff09;启动关闭指定网卡&#xff08;三&#xff09;显示所有配置的网络接口&#xff0c;不论其是否激活&#xff08;四&#…

版本交付_连续交付友好的Maven版本

版本交付持续交付管道需要可预测的软件和依赖版本。 Maven软件项目中常见的快照版本与“持续交付”背后的动机背道而驰。 为了将快照版本更新为发行版本&#xff0c;开发人员通常手动或通过诸如maven-release-plugin来编辑pom.xml文件。 但是&#xff0c;Maven还提供了将版本号…

shell开启飞行模式_今天才知道,原来手机的飞行模式用处那么多,看完涨知识了...

想必大家都知道&#xff0c;手机里有个飞行模式&#xff0c;是在乘坐飞机时使用的。其实除了这个功能之外&#xff0c;飞行模式还有很多其他的妙用&#xff0c;下面笔者就为大家一一进行介绍。一、 加快充电速度有些特殊情况你想加快手机的充电速度时&#xff0c;可以试着开启飞…

Anaconda安装库

有时候pip安装库特别慢&#xff0c;就采用conda别的方法装 conda install -c conda-forge 库名#如pydicom,gdcm

Linux 如何安装 SRPM 包(源代码 rpm 软件包,以 .src.rpm 为后缀名)/rpm 格式的源码软件包/源码包

文章目录一、SRPM 介绍二、SRPM 命名格式三、SRPM 的安装&#xff08;一&#xff09;直接使用命令 rpmbuild&#xff08;二&#xff09;利用 *.spec 文件编译&#xff08;三&#xff09;使用命令 make 编译和安装四、写在最后一、SRPM 介绍 SRPM 包&#xff0c;比 RPM 包多了一…

payara 创建 集群_在Payara Server和GlassFish中配置密码

payara 创建 集群回答Stackoverflow问题可以为我发现我最喜欢的开源工具的正式文档中的空白提供很好的反馈。 我在这里回答的问题之一是如何在docker容器中更改Payara Server主密码 。 显然&#xff0c;在标准服务器安装中&#xff0c;这很简单–只需使用asadmin change-master…

axure怎么做5秒倒计时_五个月宝宝早教,5个月婴儿早教怎么做

五个月宝宝早教&#xff0c;5个月婴儿早教怎么做&#xff0c;5个月宝宝是需要开始有意识的进行精细动作的家庭训练了5个月宝宝的一般特点&#xff1a;到了5个月时&#xff0c;能用眼睛观察周围的物体了&#xff0c;而且对什么都感到新奇好玩&#xff0c;能在眼睛的支配下抓住东…