定义密钥集成的控制器端点

在 FrontendController.java 中,定义端点来处理登录和配置文件页面的请求。 index() 方法应呈现登录页面,而 profile() 方法将验证用户会话并显示用户个人资料。

@Controllerpublic class FrontendController {  @Value(\\\"${projectID}\\\")  private String projectID;  @Value(\\\"${apiSecret}\\\")  private String apiSecret;  private final CorbadoSdk sdk;  @Autowired  public FrontendController(      @Value(\\\"${projectID}\\\") final String projectID, @Value(\\\"${apiSecret}\\\") final String apiSecret)      throws StandardException {    final Config config = new Config(projectID, apiSecret);    this.sdk = new CorbadoSdk(config);  }  @RequestMapping(\\\"/\\\")  public String index(final Model model) {    model.addAttribute(\\\"PROJECT_ID\\\", projectID);    return \\\"index\\\";  }  ...

添加密钥配置文件页面

身份验证成功后,Corbado UI 组件将重定向用户。此页面显示有关用户的信息并提供注销按钮。在 templates 文件夹中,添加文件 profile.html,内容如下:

                             

:/protected

User ID: [[${USER_ID}]]

Name: [[${USER_NAME}]]

Email: [[${USER_EMAIL}]]

接下来,在 FrontendController.java 中创建一个带有注释的 profile() 方法:

@RequestMapping(\\\"/profile\\\")public String profile() {  return \\\"profile\\\";}

验证 Corbado 会话

在我们可以使用会话中嵌入的信息之前,我们需要验证会话是否有效。因此,我们获取 cbo_short_session cookie(会话)并使用 Corbado Java SDK 中的会话服务验证其签名。这可以通过以下方式完成:

final SessionValidationResult validationResp =          sdk.getSessions().getAndValidateCurrentUser(cboShortSession);

从 Corbado 会话获取数据

它采用 cbo_short_session cookie,对其进行验证并返回用户 ID 和用户全名。

配置文件映射的最终代码如下所示:

  @RequestMapping(\\\"/profile\\\")  public String profile(      final Model model, @CookieValue(\\\"cbo_short_session\\\") final String cboShortSession) {    try {      // Validate user from token      final SessionValidationResult validationResp =          sdk.getSessions().getAndValidateCurrentUser(cboShortSession);      // get list of emails from identifier service      List emails;      emails = sdk.getIdentifiers().listAllEmailsByUserId(validationResp.getUserID());      //      model.addAttribute(\\\"PROJECT_ID\\\", projectID);      model.addAttribute(\\\"USER_ID\\\", validationResp.getUserID());      model.addAttribute(\\\"USER_NAME\\\", validationResp.getFullName());      // select email of your liking or list all emails      model.addAttribute(\\\"USER_EMAIL\\\", emails.get(0).getValue());    } catch (final Exception e) {      System.out.println(e.getMessage());      model.addAttribute(\\\"ERROR\\\", e.getMessage());      return \\\"error\\\";    }    return \\\"profile\\\";  }

启动您的应用程序

要启动 Spring Boot 应用程序,请导航到 /complete 目录并运行:

./mvnw spring-boot:run

在浏览器中访问 http://localhost:8080 以查看正在运行的登录页面。

\\\"How

结论

本指南演示了如何使用 Corbado 将密钥集成到 Java Spring Boot 应用程序中。通过以下步骤,您可以高效、安全地实现无密码身份验证。有关会话管理以及将 Corbado 集成到现有应用程序中的更多详细文档,请参阅官方 Corbado 文档。

","image":"http://www.luping.net/uploads/20240911/172604988566e16e5d0837f.jpg","datePublished":"2024-09-11T18:18:05+08:00","dateModified":"2024-09-11T18:18:05+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何将密钥集成到 Java Spring Boot 中

如何将密钥集成到 Java Spring Boot 中

发布于2024-09-11
浏览:320

Java Spring Boot 中的密钥简介

密钥提供了一种现代、安全的方式来验证用户身份,而无需依赖传统密码。在本指南中,我们将引导您使用 Thymeleaf 作为模板引擎将密钥集成到 Java Spring Boot 应用程序中

我们将利用 Corbado 的密钥优先 UI 组件连接到后端,从而简化实施过程。本教程假设您对 HTML 和 Java Spring Boot 有基本的了解,并且您已经安装了 Corbado Java SDK。

查看完整原版教程

在 Java Spring Boot 中实现密钥的先决条件

在开始之前,请确保您的项目设置包含 Corbado Java SDK。在本教程中,我们将使用版本 0.0.1 作为示例。将以下依赖项添加到您的 pom.xml 文件中:

com.corbadocorbado-java0.0.1

或者,如果您使用 Gradle,请添加:

implementation "com.corbado:corbado-java:0.0.1"

设置您的 Corbado 帐户和项目

首先,通过开发者面板注册 Corbado 帐户。在设置过程中,您将通过选择“Corbado Complete”并为您的环境选择“Web 应用程序”来配置您的项目。请务必提供应用程序 URL 和依赖方 ID,通常分别设置为 http://localhost:8080 和 localhost。这些设置对于将密钥绑定到正确的域至关重要。

接下来,从 Corbado 开发人员面板生成 API 密钥。这对于后端通信是必要的,包括用户数据检索。

构建您的 Java Spring Boot 密钥应用程序

克隆 Spring Boot 入门存储库:

git clone https://github.com/spring-guides/gs-spring-boot.git

在此项目中,将 HelloController.java 重命名为 FrontendController.java。该控制器将根据用户请求提供 HTML 文件。在您的 application.properties 文件中,将 projectID 和 apiSecret 存储为环境变量(两者都可以从 Corbado 开发人员面板获取)。

创建密钥登录页面

在/complete/src/main/resources/templates目录中创建一个index.html文件。该文件将用作登录页面,嵌入 Corbado 密码优先 UI 组件。基本结构如下:



  

定义密钥集成的控制器端点

在 FrontendController.java 中,定义端点来处理登录和配置文件页面的请求。 index() 方法应呈现登录页面,而 profile() 方法将验证用户会话并显示用户个人资料。

@Controller
public class FrontendController {

  @Value("${projectID}")
  private String projectID;

  @Value("${apiSecret}")
  private String apiSecret;

  private final CorbadoSdk sdk;

  @Autowired
  public FrontendController(
      @Value("${projectID}") final String projectID, @Value("${apiSecret}") final String apiSecret)
      throws StandardException {
    final Config config = new Config(projectID, apiSecret);
    this.sdk = new CorbadoSdk(config);
  }

  @RequestMapping("/")
  public String index(final Model model) {
    model.addAttribute("PROJECT_ID", projectID);
    return "index";
  }
  ...

添加密钥配置文件页面

身份验证成功后,Corbado UI 组件将重定向用户。此页面显示有关用户的信息并提供注销按钮。在 templates 文件夹中,添加文件 profile.html,内容如下:


  
    

:/protected

User ID: [[${USER_ID}]]

Name: [[${USER_NAME}]]

Email: [[${USER_EMAIL}]]

接下来,在 FrontendController.java 中创建一个带有注释的 profile() 方法:

@RequestMapping("/profile")
public String profile() {
  return "profile";
}

验证 Corbado 会话

在我们可以使用会话中嵌入的信息之前,我们需要验证会话是否有效。因此,我们获取 cbo_short_session cookie(会话)并使用 Corbado Java SDK 中的会话服务验证其签名。这可以通过以下方式完成:

final SessionValidationResult validationResp =
          sdk.getSessions().getAndValidateCurrentUser(cboShortSession);

从 Corbado 会话获取数据

它采用 cbo_short_session cookie,对其进行验证并返回用户 ID 和用户全名。

配置文件映射的最终代码如下所示:

  @RequestMapping("/profile")
  public String profile(
      final Model model, @CookieValue("cbo_short_session") final String cboShortSession) {
    try {
      // Validate user from token
      final SessionValidationResult validationResp =
          sdk.getSessions().getAndValidateCurrentUser(cboShortSession);
      // get list of emails from identifier service
      List emails;

      emails = sdk.getIdentifiers().listAllEmailsByUserId(validationResp.getUserID());

      //
      model.addAttribute("PROJECT_ID", projectID);
      model.addAttribute("USER_ID", validationResp.getUserID());
      model.addAttribute("USER_NAME", validationResp.getFullName());
      // select email of your liking or list all emails
      model.addAttribute("USER_EMAIL", emails.get(0).getValue());

    } catch (final Exception e) {
      System.out.println(e.getMessage());
      model.addAttribute("ERROR", e.getMessage());
      return "error";
    }
    return "profile";
  }

启动您的应用程序

要启动 Spring Boot 应用程序,请导航到 /complete 目录并运行:

./mvnw spring-boot:run

在浏览器中访问 http://localhost:8080 以查看正在运行的登录页面。

How to Integrate Passkeys into Java Spring Boot

结论

本指南演示了如何使用 Corbado 将密钥集成到 Java Spring Boot 应用程序中。通过以下步骤,您可以高效、安全地实现无密码身份验证。有关会话管理以及将 Corbado 集成到现有应用程序中的更多详细文档,请参阅官方 Corbado 文档。

版本声明 本文转载于:https://dev.to/corbado/how-to-integrate-passkeys-into-java-spring-boot-3264?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 使用 Buildpack 创建 Spring Boot 应用程序的 Docker 映像
    使用 Buildpack 创建 Spring Boot 应用程序的 Docker 映像
    介绍 您已经创建了一个 Spring Boot 应用程序。它在您的本地计算机上运行良好,现在您需要将该应用程序部署到其他地方。在某些平台上,您可以直接提交jar文件,它将被部署。在某些地方,您可以启动虚拟机,下载源代码,构建并运行它。但是,大多数时候您需要使用容器来部署应用程序。大...
    编程 发布于2024-11-05
  • 如何保护 PHP 代码免遭未经授权的访问?
    如何保护 PHP 代码免遭未经授权的访问?
    保护 PHP 代码免遭未经授权的访问保护 PHP 软件背后的知识产权对于防止其滥用或盗窃至关重要。为了解决这个问题,可以使用多种方法来混淆和防止未经授权的访问您的代码。一种有效的方法是利用 PHP 加速器。这些工具通过缓存频繁执行的部分来增强代码的性能。第二个好处是,它们使反编译和逆向工程代码变得更...
    编程 发布于2024-11-05
  • React:了解 React 的事件系统
    React:了解 React 的事件系统
    Overview of React's Event System What is a Synthetic Event? Synthetic events are an event-handling mechanism designed by React to ach...
    编程 发布于2024-11-05
  • 为什么在使用 Multipart/Form-Data POST 请求时会收到 301 Moved Permanently 错误?
    为什么在使用 Multipart/Form-Data POST 请求时会收到 301 Moved Permanently 错误?
    Multipart/Form-Data POSTs尝试使用 multipart/form-data POST 数据时,可能会出现类似所提供的错误消息遭遇。理解问题需要检查问题的构成。遇到的错误是 301 Moved Permanently 响应,表明资源已被永久重定向。当未为 multipart/f...
    编程 发布于2024-11-05
  • 如何使用日期和时间对象确定 PHP 中的时间边界?
    如何使用日期和时间对象确定 PHP 中的时间边界?
    确定 PHP 中的时间边界在此编程场景中,我们的任务是确定给定时间是否在预定义的范围内。具体来说,我们得到三个时间字符串:当前时间、日出和日落。我们的目标是确定当前时间是否位于日出和日落的边界时间之间。为了应对这一挑战,我们将使用 DateTime 类。这个类使我们能够表示和操作日期和时间。我们将创...
    编程 发布于2024-11-05
  • 如何使用 CSS 变换比例修复 jQuery 拖动/调整大小问题?
    如何使用 CSS 变换比例修复 jQuery 拖动/调整大小问题?
    jQuery 使用 CSS 变换缩放拖动/调整大小问题: 当应用 CSS 变换时,特别是变换:矩阵(0.5, 0, 0, 0.5, 0, 0);,对于一个 div 并在子元素上使用 jQuery 的draggable() 和 resizing() 插件,jQuery 所做的更改变得与鼠标位置“不同步...
    编程 发布于2024-11-05
  • 如何修复 TensorFlow 中的“ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点)”错误?
    如何修复 TensorFlow 中的“ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点)”错误?
    TensorFlow:解决“ValueError: Failed to Convert NumPy Array to Tensor (Unsupported Object Type Float)”工作时遇到的常见错误TensorFlow 的错误是“ValueError:无法将 NumPy 数组转换为...
    编程 发布于2024-11-05
  • 如何高效判断本地存储项是否存在?
    如何高效判断本地存储项是否存在?
    确定本地存储项目是否存在使用 Web 存储时,在访问或修改特定项目之前验证它们是否存在至关重要。在本例中,我们想要确定 localStorage 中是否设置了特定项目。当前方法检查项目是否存在的当前方法似乎是:if (!(localStorage.getItem("infiniteScro...
    编程 发布于2024-11-05
  • Java 中的原子是什么?了解 Java 中的原子性和线程安全
    Java 中的原子是什么?了解 Java 中的原子性和线程安全
    1. Java 原子简介 1.1 Java 中什么是原子? 在Java中,java.util.concurrent.atomic包提供了一组支持对单个变量进行无锁线程安全编程的类。这些类统称为原子变量。最常用的原子类包括 AtomicInteger 、 Atomic...
    编程 发布于2024-11-05
  • 前端/后端主要配置文件
    前端/后端主要配置文件
    从 DevOps 的角度来看,了解 Java 和 Node.js(后端和前端)代码库中的配置文件对于管理构建流程、部署和环境设置至关重要。以下是在 Java 和 Node.js 应用程序中需要注意的配置文件的完整列表: Java 应用程序 后端 pom.xml (Maven): 管理...
    编程 发布于2024-11-05
  • Python 中出现“意外缩进”错误的原因以及如何解决?
    Python 中出现“意外缩进”错误的原因以及如何解决?
    Python 中意外缩进的意义是什么?在 Python 编程领域,精心制作的缩进起着至关重要的作用定义代码的结构和流程。当这个缩进不经意间被打乱时,就会出现“unexpected indent”错误,提示需要立即纠正。错误信息背后:Unexpected Indent本质Python 的语法要求代码块...
    编程 发布于2024-11-05
  • 在 Node.js 中什么时候应该使用 `setImmediate` 和 `process.nextTick`?
    在 Node.js 中什么时候应该使用 `setImmediate` 和 `process.nextTick`?
    了解 setImmediate 和 nextTick 之间的差异Node.js 版本 0.10 引入了 setImmediate,这是一个旨在补充 process.nextTick 的新 API。这两个函数都提供了异步执行回调的方法,但它们具有控制其使用的独特特征。nextTick:快速和同步pro...
    编程 发布于2024-11-05
  • jQuery中如何高效获取隐藏元素的高度?
    jQuery中如何高效获取隐藏元素的高度?
    在 jQuery 中获取隐藏元素的高度处理隐藏元素时,检索其高度可能具有挑战性。暂时显示元素以测量其高度然后再次隐藏它的传统方法似乎效率低下。有没有更优化的解决方案?jQuery 1.4.2 方法这是一个使用 jQuery 1.4.2 的示例:$select.show(); optionHeight...
    编程 发布于2024-11-05
  • 为什么我不能在 Go Struct 标签中使用变量?
    为什么我不能在 Go Struct 标签中使用变量?
    在 Go 结构体标签中使用变量在 Go 中,结构体标签用于指定有关结构体中字段的元数据。虽然可以使用字符串文字定义标签,但尝试在其位置使用变量会导致错误。无效用法:const ( TYPE = "type" ) type Shape struct { Type s...
    编程 发布于2024-11-05
  • Qopy:作为开发人员我最喜欢的剪贴板管理器
    Qopy:作为开发人员我最喜欢的剪贴板管理器
    作为一名开发人员,我一直在寻找可以使我的工作流程更顺畅、更高效的工具。最近,我偶然发现了 Qopy,一个可以在 Linux 和 Windows 上运行的开源剪贴板管理器。 什么是Qopy? Qopy 是一个简单的剪贴板管理器,旨在改进标准剪贴板体验。它的设计宗旨是用户友好、可靠且快速...
    编程 发布于2024-11-05

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3