基于SpringBoot和OAuth2,實現通過Github授權登錄應用

基于SpringBoot和OAuth2,實現通過Github授權登錄應用

文章目錄

  • 基于SpringBoot和OAuth2,實現通過Github授權登錄應用
    • 0. 引言
    • 1. 創建Github應用
    • 2. 創建SpringBoot測試項目
      • 2.1 初始化項目
      • 2.2 設置配置文件信息
      • 2.3 創建Controller層
      • 2.4 創建Html頁面
    • 3. 啟動應用
    • 4. 其他

0. 引言

在注冊登錄網站或者應用時,通常會有社交方式登錄,例如在登錄CSDN時,會提供多種登陸方式,如下圖。

在這里插入圖片描述
本文介紹通過SpringBoot和OAuth2,開發自己的應用,并實現通過Github授權登錄。

1. 創建Github應用

  • 首先登錄Github,進入到Settings-Developer Settings,點擊OAuth Apps,新建New OAuth App
    在這里插入圖片描述
  • 填寫相關信息
    在這里插入圖片描述

點擊注冊應用

  • 注冊完成后打開,可以獲得Client IDClient secrets

注意!
Client secrets要注意復制下來保存,不然在進入這個頁面,也獲取不到原來完整的Client secrets了,只能重新生成!

在這里插入圖片描述

2. 創建SpringBoot測試項目

2.1 初始化項目

初始化項目,同時應包含以下依賴

Spring Web
Thymeleaf
Spring Security
OAuth2 Client

在這里插入圖片描述
創建完成后,創建Controller文件和index文件。最終項目結構目錄如下:
在這里插入圖片描述

2.2 設置配置文件信息

application.yml:

spring:security:oauth2:client:registration:github:client-id: xxxclient-secret: xxx

將上面生成的client-id和client-secret寫入配置文件

2.3 創建Controller層

IndexController.java

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;/*** @author SaoE* @date 2024/12/29 21:29*/
@Controller
public class IndexController {@GetMapping("/")public String index(Model model,@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient,@AuthenticationPrincipal OAuth2User oauth2User) {model.addAttribute("userName", oauth2User.getName());model.addAttribute("clientName", authorizedClient.getClientRegistration().getClientName());model.addAttribute("userAttributes", oauth2User.getAttributes());return "index";}
}

2.4 創建Html頁面

resources/templates/index.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org" xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
<head><title>Spring Security - OAuth 2.0 Login</title><meta charset="utf-8" />
</head>
<body>
<div style="float: right" th:fragment="logout" sec:authorize="isAuthenticated()"><div style="float:left"><span style="font-weight:bold">User: </span><span sec:authentication="name"></span></div><div style="float:none">&nbsp;</div><div style="float:right"><form action="#" th:action="@{/logout}" method="post"><input type="submit" value="Logout" /></form></div>
</div>
<h1>OAuth 2.0 Login with Spring Security</h1>
<div>You are successfully logged in <span style="font-weight:bold" th:text="${userName}"></span>via the OAuth 2.0 Client <span style="font-weight:bold" th:text="${clientName}"></span>
</div>
<div>&nbsp;</div>
<div><span style="font-weight:bold">User Attributes:</span><ul><li th:each="userAttribute : ${userAttributes}"><span style="font-weight:bold" th:text="${userAttribute.key}"></span>: <span th:text="${userAttribute.value}"></span></li></ul>
</div>
</body>
</html>

3. 啟動應用

  • 在瀏覽器輸入并訪問http://localhost:8080/,此時瀏覽器將被重定向到默認的自動生成的登錄頁面,該頁面顯示了一個用于GitHub登錄的鏈接。
    在這里插入圖片描述

點擊授權

  • 此時,OAuth客戶端訪問GitHub的獲取用戶信息的接口獲取基本個人資料信息,并建立一個已認證的會話。
    在這里插入圖片描述

4. 其他

SpringBoot源碼的CommonOAuth2Provider類中,默認配置了GOOGLEFACEBOOKGITHUBOKTA的授權登錄配置
在這里插入圖片描述
以Github為例,默認配置如下:

    GITHUB {public Builder getBuilder(String registrationId) {Builder builder = this.getBuilder(registrationId, ClientAuthenticationMethod.CLIENT_SECRET_BASIC, "{baseUrl}/{action}/oauth2/code/{registrationId}");builder.scope(new String[]{"read:user"});builder.authorizationUri("https://github.com/login/oauth/authorize");builder.tokenUri("https://github.com/login/oauth/access_token");builder.userInfoUri("https://api.github.com/user");builder.userNameAttributeName("id");builder.clientName("GitHub");return builder;}},

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64738.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64738.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CMS漏洞靶場攻略

DeDeCMS 環境搭建 傻瓜式安裝 漏洞一&#xff1a;通過文件管理器上傳WebShel 步驟?:訪問目標靶場其思路為 dedecms 后臺可以直接上傳任意文件&#xff0c;可以通過?件管理器上傳php文件獲取webshell 登陸網站后臺 步驟二&#xff1a;登陸到后臺點擊 【核心】 --》 【文件式…

0xc0000020錯誤代碼怎么處理,Windows11、10壞圖像錯誤0xc0000020的修復辦法

“0xc0000020”是一種 Windows 應用程序錯誤代碼&#xff0c;通常表明某些文件缺失或損壞。這可能是由于系統文件損壞、應用程序安裝或卸載問題、惡意軟件感染、有問題的 Windows 更新等原因導致的。 比如&#xff0c;當運行軟件時&#xff0c;可能會出現類似“C:\xx\xxx.dll …

LabVIEW 中 NI Vision 模塊的IMAQ Create VI

IMAQ Create VI 是 LabVIEW 中 NI Vision 模塊&#xff08;NI Vision Development Module&#xff09;的一個常用 VI&#xff0c;用于創建一個圖像變量。該圖像變量可以存儲和操作圖像數據&#xff0c;是圖像處理任務的基礎。 ? 通過以上操作&#xff0c;IMAQ Create VI 是構建…

HTML5 標簽輸入框(Tag Input)詳解

HTML5 標簽輸入框&#xff08;Tag Input&#xff09;詳解 標簽輸入框&#xff08;Tag Input&#xff09;是一種用戶界面元素&#xff0c;允許用戶輸入多個標簽或關鍵詞&#xff0c;通常用于表單、搜索框或內容分類等場景。以下是實現標簽輸入框的詳細講解。 1. 任務概述 標…

使用位操作符實現加減乘除!

歡迎拜訪&#xff1a;霧里看山-CSDN博客 本篇主題&#xff1a;使用位操作符實現加減乘除 發布時間&#xff1a;2025.1.1 隸屬專欄&#xff1a;C語言 目錄 位操作實現加法運算&#xff08;&#xff09;原理代碼示例 位操作實現減法運算&#xff08;-&#xff09;原理代碼示例 位…

[Spring] Spring AOP

&#x1f338;個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;?熱門專欄: &#x1f9ca; Java基本語法(97平均質量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection與…

Java-數據結構-時間和空間復雜度

一、什么是時間和空間復雜度&#xff1f; &#x1f4da; 那么在了解時間復雜度和空間復雜度之前&#xff0c;我們先要知道為何有這兩者的概念&#xff1a; 首先我們要先了解"算法"&#xff0c;在之前我們學習過關于"一維前綴和與差分"&#xff0c;"…

商湯C++開發面試題及參考答案

C++11 有哪些新特性? C++11 帶來了眾多令人矚目的新特性,極大地豐富和增強了這門編程語言的功能與表現力。 首先是類型推導方面,引入了auto關鍵字。通過auto,編譯器能夠自動根據初始化表達式來推導出變量的類型,這在處理復雜的模板類型或者較長的類型聲明時非常方便,能讓…

Cesium 實戰 27 - 三維視頻融合(視頻投影)

Cesium 實戰 27 - 三維視頻融合(視頻投影) 核心代碼完整代碼在線示例在 Cesium 中有幾種展示視頻的方式,比如墻體使用視頻材質,還有地面多邊形使用視頻材質,都可以實現視頻功能。 但是隨著攝像頭和無人機的流行,需要視頻和場景深度融合,簡單的實現方式則不能滿足需求。…

U盤格式化工具合集:6個免費的U盤格式化工具

在日常使用中&#xff0c;U盤可能會因為文件系統不兼容、數據損壞或使用需求發生改變而需要進行格式化。一個合適的格式化工具不僅可以清理存儲空間&#xff0c;還能解決部分存儲問題。本文為大家精選了6款免費的U盤格式化工具&#xff0c;并詳細介紹它們的功能、使用方法、優缺…

如何使用AI工具cursor(內置ChatGPT 4o+claude-3.5)

??溫馨提示&#xff1a; 禁止商業用途&#xff0c;請支持正版&#xff0c;充值使用&#xff0c;尊重知識產權&#xff01; 免責聲明&#xff1a; 1、本教程僅用于學習和研究使用&#xff0c;不得用于商業或非法行為。 2、請遵守Cursor的服務條款以及相關法律法規。 3、本…

Spring Boot的開發工具(DevTools)模塊中的熱更新特性導致的問題

問題&#xff1a; java.lang.ClassCastException: class cn.best.scholarflow.framework.system.domain.entity.SysUser cannot be cast to class cn.best.scholarflow.framework.system.domain.entity.SysUser (cn.best.scholarflow.framework.system.domain.…

異常與中斷(上)

文章目錄 一、異常與中斷的概念引入與處理流程1.1 生活中的中斷1.2 母親如何處理中斷1.3 ARM系統中異常與中斷處理流程 二、ARM架構中異常與中斷的處理2.1 處理流程2.2 cortex M3/M42.2.1 M3/M4的向量表2.2.2 M3/M4的異常/中斷處理流程 2.3 cortex A72.3.1 A7的向量表2.3.2 A7的…

Zabbix 監控平臺 添加監控目標主機

Zabbix監控平臺是一個企業級開源解決方案&#xff0c;用于分布式系統監視和網絡監視。它由Zabbix Server和可選組件Zabbix Agent組成&#xff0c;通過C/S模式&#xff08;客戶端-服務器模型&#xff09;采集數據&#xff0c;并通過B/S模式&#xff08;瀏覽器-服務器模型&#x…

游戲關卡設計的常用模式

游戲關卡分為很多種&#xff0c;但常用的有固定套路&#xff0c;分為若干種類型。 關卡是主角與怪物、敵方戰斗的場所&#xff0c;包括裝飾物、通道。 單人游戲的關卡較小&#xff0c;偏線性&#xff1b; 聯機/MMO的關卡較大&#xff0c;通道多&#xff0c;自由度高&#xf…

【容器化技術 Docker 與微服務部署】詳解

容器化技術 Docker 與微服務部署 一、容器化技術概述 &#xff08;一&#xff09;概念 容器化技術是一種操作系統級別的虛擬化方法&#xff0c;它允許將應用程序及其依賴項&#xff08;如運行時環境、系統工具、庫等&#xff09;打包成一個獨立的、可移植的單元&#xff0c;這…

TypeScript 后端開發中的熱重載編譯處理

在一些除了nest框架外的一些其他nodejs框架中沒有提供對ts編譯和熱重載&#xff0c;如果使用typescript我們需要自己進行配置。 方法一&#xff08;推薦&#xff09; 使用bun運行環境&#xff08;快&#xff09;。注&#xff1a;一些不是使用js&#xff0c;ts代碼編寫的第三方…

QT集成IntelRealSense雙目攝像頭3,3D顯示

前兩篇文章&#xff0c;介紹了如何繼承intel realsense相機和opengl。 這里介紹如何給深度數據和色彩數據一塊顯示到opengl里面。 首先&#xff0c;需要了解深度數據和彩色數據是如何存儲的。先說彩色數據。彩色圖像一般都是RGB&#xff0c;也就是每個像素有三個字節&#xf…

Postman[4] 環境設置

作用&#xff1a;不同的環境可以定義不同的參數&#xff0c;在運行請求時可以根據自己的需求選擇需要的環境 1.創建Environment 步驟&#xff1a; Environment-> ->命名->添加環境變量 2.使用Environment 步驟&#xff1a;Collection- >右上角選擇需要的環境

【合并區間】

問題 以數組 intervals 表示若干個區間的集合&#xff0c;其中單個區間為 intervals[i] [starti, endi] 。 請你合并所有重疊的區間&#xff0c;并返回 一個不重疊的區間數組&#xff0c;該數組需恰好覆蓋輸入中的所有區間 。示例 1&#xff1a; 輸入&#xff1a;intervals …