谷歌 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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

图像融合亮度一致_重磅干货低光图像处理方案

点击上方“AIWalker”&#xff0c;选择加“星标”或“置顶” 重磅干货&#xff0c;第一时间送达Tips&#xff1a;一点点提示&#xff0c;因内容较多建议先关注&#xff0c;再置顶&#xff0c;最后端杯茶来精心浏览。背景低光图像是夜晚拍照时极为常见的一种现象。不充分的光…

Adobe PhotoShop(PS) for Mac 如何隐藏切片框?

如何取消显示如下图所示的切片框&#xff1a; 打开『视图』➟ 『显示』&#xff0c;把『切片』前面的勾去掉&#xff0c;如下图所示&#xff1a;

邮宝打印面单尺寸调整_如何打印身份证的实际尺寸?怎样用照片打印身份证复印件...

点击上面 蓝色 文字关注我们&#xff0c;了解选购百科知识&#xff0c;快乐健康不停&#xff01;怎样打印身份证复印件&#xff1f;可以把身份证的照片导入电脑或者扫描件打印黑白的即可。如何打印身份证的实际尺寸&#xff1f;二代身份证的实际尺寸是&#xff1a;85.6MM X 54M…

取模和求余运算

文章目录背景探究总结被除数 dividend 用 a 表示&#xff1b; 除数 divisor 用 b 表示&#xff1b; 商 quotient 用 q 表示&#xff1b; 余 remainder 用 rem 表示&#xff1b; 模 modulo 用 mod 表示。 背景 最近在一道 Java 习题中&#xff0c;看到这样的一道题&#xff1a;…

图像重建算法_基于深度学习图像重建算法(DLIR)对CT图像质量和剂量优化的研究:体模实验...

编者按&#xff1a;今年Jol Greffier博士等在European Radiology (IF 4.1)上发表了题为《Image quality and dose reduction opportunity of deep learning image reconstruction algorithm for CT: a phantom study》的文章&#xff0c;通过与混合迭代重建算法(IR)对比&#x…

oracle中sp怎么写_校招简历中的实习和项目经历该怎么写?

在2017年和2018年&#xff0c;我针对校招生的简历分别写了两篇文章&#xff0c;一篇是《秋招中的互联网产品、运营岗&#xff0c;该如何准备&#xff1f;》&#xff0c;里面有一部分内容是关于简历的准备&#xff1b;另一篇是《如何用产品思维解决简历问题&#xff1f;七步简历…

自然语言处理领域基本概念笔记

自然语言处理 词向量&#xff1a; 自然语言处理问题要转化为机器学习的问题&#xff0c;首先就要把单词数学化表示&#xff0c;就是用n维实数向量来代表一个单词。 对话系统 对话系统发展历程的三个阶段&#xff1a; 1.基于符号规则和模板的对话系统 2.基于统计机器学习的…

如何理解 inode

一、inode是什么&#xff1f; 理解inode&#xff0c;要从文件储存说起。 文件储存在硬盘上&#xff0c;硬盘的最小存储单位叫做"扇区"&#xff08;Sector&#xff09;。每个扇区储存512字节&#xff08;相当于0.5KB&#xff09;。 操作系统读取硬盘的时候&#xff0c…

java api 开发_Java开发人员应该知道的前20个库和API

java api 开发优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解&#xff0c;包括JDK和第三方库。 我花了很多时间来学习API&#xff0c;尤其是在阅读了Effective Java 3rd Edition之后 &#xff0c;Joshua Bloch建议在Java 3rd Edition中使用现有的API进行开发&#x…

Linux 系统的硬链接和软链接详解

文章目录什么是链接链接用来干什么的硬链接和软链接的区别硬链接和软链接的图示总结我们知道文件都有文件名与数据&#xff0c;这在 Linux 上被分成两个部分&#xff1a;用户数据 (user data) 与元数据 (metadata)。用户数据&#xff0c;即文件数据块 (data block)&#xff0c;…

okta-spring_通过Okta的单点登录保护Spring Boot Web App的安全

okta-spring“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 您可以使用SpringBoot和Okta在不到20分钟的时间内启动具有完整用户身份和…

apache poi_将HTML转换为Apache POI的RichTextString

apache poi1.概述 在本教程中&#xff0c;我们将构建一个将HTML作为输入的应用程序&#xff0c;并使用提供HTML的RichText表示形式创建Microsoft Excel工作簿。 为了生成Microsoft Excel工作簿&#xff0c;我们将使用Apache POI 。 为了分析HTML&#xff0c;我们将使用Jericho。…

Windows 下有哪些逆天的软件?

文章目录逆天软件系列1&#xff1a;Everything逆天软件系列2&#xff1a;Total Commander逆天软件系列3&#xff1a;Snipaste逆天软件系列4&#xff1a;Microsoft To-Do逆天软件系列5&#xff1a;ScreenToGIF逆天软件系列6&#xff1a;Geek Uninstaller逆天软件系列7&#xff1…

oracle adf_Fn函数来构建Oracle ADF应用程序

oracle adf在我之前的一篇文章中&#xff0c;我描述了如何创建一个Docker容器作为ADF应用程序的构建器。 在这里&#xff0c;我将展示如何将此容器用作 在FN平台的功能 。 首先&#xff0c;让我们更新容器&#xff0c;使其符合功能要求&#xff0c;这意味着可以将其作为接受某…

Sublime Text 4.0 4102 安装插件的问题

文章目录安装包控件&#xff08;Package Control&#xff09;如何安装插件打开 Install Package 面板搜索和安装插件无法打开 Install Package 面板的问题故障排除安装包控件&#xff08;Package Control&#xff09; 要安装插件&#xff0c;必须先安装 Package Control&#…

maven安装教程安装教程_Maven教程之春

maven安装教程安装教程1.简介 在这篇文章中&#xff0c;我们将演示如何针对非常特定的用例对Spring使用Maven依赖项。 我们使用的所有库的最新版本都可以在Maven Central上找到。 对于一个有效的构建周期来说&#xff0c;了解Maven依赖项的工作方式以及如何对其进行管理很重要…