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

在 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-11-07T06:44:33+08:00","dateModified":"2024-11-07T06:44:33+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何將金鑰整合到 Java Spring Boot 中

如何將金鑰整合到 Java Spring Boot 中

發佈於2024-11-07
瀏覽:101

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.corbado
  corbado-java
  0.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]刪除
最新教學 更多>
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-07-10
  • Java數組中元素位置查找技巧
    Java數組中元素位置查找技巧
    在Java數組中檢索元素的位置 利用Java的反射API將數組轉換為列表中,允許您使用indexof方法。 (primitives)(鏈接到Mishax的解決方案) 用於排序陣列的數組此方法此方法返回元素的索引,如果發現了元素的索引,或一個負值,指示應放置元素的插入點。
    程式設計 發佈於2025-07-10
  • 如何有效地選擇熊貓數據框中的列?
    如何有效地選擇熊貓數據框中的列?
    在處理數據操作任務時,在Pandas DataFrames 中選擇列時,選擇特定列的必要條件是必要的。在Pandas中,選擇列的各種選項。 選項1:使用列名 如果已知列索引,請使用ILOC函數選擇它們。請注意,python索引基於零。 df1 = df.iloc [:,0:2]#使用索引0和1 ...
    程式設計 發佈於2025-07-10
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-07-10
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-07-10
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-07-10
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-07-10
  • 圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    在chrome 在使用Chrome and IE9中的圖像時遇到的一個頻繁的問題是圍繞圖像的持續薄薄邊框,儘管指定了圖像,儘管指定了;和“邊境:無;”在CSS中。要解決此問題,請考慮以下方法: Chrome具有忽略“ border:none; none;”的已知錯誤,風格。要解決此問題,請使用以下...
    程式設計 發佈於2025-07-10
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-07-10
  • eval()vs. ast.literal_eval():對於用戶輸入,哪個Python函數更安全?
    eval()vs. ast.literal_eval():對於用戶輸入,哪個Python函數更安全?
    稱量()和ast.literal_eval()中的Python Security 在使用用戶輸入時,必須優先確保安全性。強大的Python功能Eval()通常是作為潛在解決方案而出現的,但擔心其潛在風險。 This article delves into the differences betwee...
    程式設計 發佈於2025-07-10
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-07-10
  • Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    程式設計 發佈於2025-07-10
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-07-10
  • Go web應用何時關閉數據庫連接?
    Go web應用何時關閉數據庫連接?
    在GO Web Applications中管理數據庫連接很少,考慮以下簡化的web應用程序代碼:出現的問題:何時應在DB連接上調用Close()方法? ,該特定方案將自動關閉程序時,該程序將在EXITS EXITS EXITS出現時自動關閉。但是,其他考慮因素可能保證手動處理。 選項1:隱式關閉終...
    程式設計 發佈於2025-07-10
  • Python中何時用"try"而非"if"檢測變量值?
    Python中何時用"try"而非"if"檢測變量值?
    使用“ try“ vs.” if”來測試python 在python中的變量值,在某些情況下,您可能需要在處理之前檢查變量是否具有值。在使用“如果”或“ try”構建體之間決定。 “ if” constructs result = function() 如果結果: 對於結果: ...
    程式設計 發佈於2025-07-10

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3