spring-boot-3.2.6+spring-security-6.2.4+oauth2整合github示例

news2024/11/15 20:43:05

一、添加依赖

在 pom.xml 中添加如下依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.song</groupId>
    <artifactId>oauth-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>oauth-client</name>
    <description>客户端接入oauth2-client之整合Github示例项目</description>

    <properties>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>3.2.6</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity6</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

二、获取应用ID + 应用密钥

1、登录Github并点击【Settings】按钮

2、跳转后点击【Developer setting】按钮

3、跳转后点击【New Github App】按钮

4、生成应用ID + 应用密钥

跳转后按展示页面操作后得到类似如下结果页面

其中,Client ID是应用ID,Client secrets是应用密钥且 Client secrets 只展示一次,切记及时拷贝备份!

三、配置应用ID + 应用密钥

在项目文件 application.yml 种配置应用ID + 应用密钥

spring:
  application:
    name: oauth-client
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: 应用ID
            client-secret: 应用密钥

四、编写授权访问 controller 类

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;

/**
 * OAuth2 Log in controller.
 *
 * @author songjianyong
 */
@Controller
public class OAuth2LoginController {

	@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";
	}

}

五、编写授权成功 index.html 页面

该页面默认路径: src/main/resources/templates/index.html

<!DOCTYPE html>
<html lang="zh" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
      xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity6">
<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>

六、启动

启动后访问地址:http://localhost:8080 跳转至授权页面如下:

输入你的账号密码,可跳转至授权成功页面,如下:

整合完毕!

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

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

相关文章

<数据集>航拍路面病害识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3151张 标注数量(xml文件个数)&#xff1a;3151 标注数量(txt文件个数)&#xff1a;3151 标注类别数&#xff1a;7 标注类别名称&#xff1a;[Longitudinal crack, Transverse crack, Alligator crack, Oblique cr…

腾讯 图标点选 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我…

Element UI中报dateObject.getTime is not a function解决方法~

1、错误信息。 2、该报错原因是Element UI中日期组件的校验规则是type: "date",而一般我们从后台拿到的数据是字符串型的&#xff0c;不满足预期&#xff0c;就会报错。 3、解决方法。 去掉日子组件中的type: "date"校验规则即可。 rules: {newName: [{…

SOMEIP_ETS_046: echoUTF16FIXED

测试目的&#xff1a; 验证设备&#xff08;DUT&#xff09;是否能够正确处理echoUTF16FIXED方法的参数&#xff0c;并确保发送和接收的参数顺序和值保持一致。 描述 本测试用例旨在检查DUT在接收到一个使用echoUTF16FIXED方法的SOME/IP消息时&#xff0c;是否能够按照请求中…

利用PostgreSQL向量数据库和负责任的AI知识库在亚马逊云科技上构建商品推荐机器人

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技利用Postg…

软件需求规格说明书编写规范(Doc原件)

软件需求规格说明书编写规范&#xff08;Word原件&#xff09; 1.项目背景 2.项目目标 3.系统架构 4.总体流程 5.名称解释 6.功能模块 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明…

WPF MvvmLight

关于 停止更新 官网&#xff1a;http://www.mvvmlight.net/ 源码地址&#xff1a;GitHub - lbugnion/mvvmlight: The main purpose of the toolkit is to accelerate the creation and development of MVVM applications in Xamarin.Android, Xamarin.iOS, Xamarin.Forms, Wi…

C++ //练习 17.17 更新你的程序,令它查找输入序列中所有违反“ei“语法规则的单词。

C Primer&#xff08;第5版&#xff09; 练习 17.17 练习 17.17 更新你的程序&#xff0c;令它查找输入序列中所有违反"ei"语法规则的单词。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块&#xff1a; /**********…

定制开发AI智能名片O2O商城小程序:基于限量策略与个性化追求的营销创新

摘要:随着科技的飞速发展和消费者需求的日益多元化&#xff0c;传统商业模式正经历着前所未有的变革。在数字化转型的大潮中&#xff0c;定制开发AI智能名片O2O商城小程序作为一种新兴的商业模式&#xff0c;凭借其独特的个性化定制能力、高效的线上线下融合&#xff08;O2O&am…

居住证申报系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;群众用户管理&#xff0c;警方管理&#xff0c;居住证登记管理&#xff0c;回执单管理&#xff0c;领证信息管理&#xff0c;公告栏管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页…

MySQL数据库专栏(四)数据库操作

1、创建数据库 create database if not exists [数据库名称] character set [字符集] COLLATE [排序规则]; 例如&#xff1a;create database if not exists db_demo character set utf8mb4 COLLATE utf8mb4_general_ci; if not exists&#xff1a;判断数据库是否存在&#x…

Ubuntu20, Windows10 双系统安装

1. 制作启动盘 1.1 下载 Ubuntu 系统镜像 ISO 文件 从 Ubuntu 官网下载 (https://cn.ubuntu.com/download/desktop)。官网访问慢的&#xff0c;从国内镜像点下。 1.2 烧录 Ubuntu ISO 镜像 下载 Rufus&#xff1a;从Rufus官网下载 Rufus 工具。 插入U 盘&#xff1a;将U盘插…

详解语义安全(semantically secure)

目录 一. 引入 二. 密文与明文 2.1 通俗性理解 2.2 定理 2.3 定理理解 三. 语义安全的第一个版本 3.1 基本理解 3.2 定理 3.3 定理理解 四. 语义安全的第二个版本 4.1 直观解释 4.2 小结 一. 引入 密码学中安全加密要求&#xff1a;敌手&#xff08;adversary&…

“百板齐发“ — 一个拥有上百个独特看板的代码

精选100套AXURE可视化数据大屏看板 产品经理高效工具 高保真原型模板 赋能智慧城市 元件库 AXURE9.0版本&#xff0c;所有页面均可编辑&#xff0c;部分地图与实现放大缩小&#xff0c;拖拉拽的功能。 01.水质情况实时监测预警系统 02.全国停车云实时数据监测系统 03.中国移…

【系统分析师】-综合知识-补充知识

1、在软件设计中&#xff0c;通常由着眼于“宏观的”软件架构开始&#xff0c;由着眼于“微观的”构件模块结束。 即测试应该从“微观”开始&#xff0c;逐步转向“宏观”。 2、数据备份是信息系统运行管理时保护数据的重要措施。增量备份可针对上次任何一种备份进行&#xf…

海康VisionMaster使用学习笔记7-Group模块

Group模块的使用 1. 添加图像源&#xff0c;导入图片 2. 添加快速匹配 对匹配框区域进行顶点检测 并循环10次(匹配框个数 从而检测出所有顶点)。 3. 添加Group工具 拖一个Group模块 点击设置 输入设置 添加图像源输入数据 添加快速匹配的匹配框 4. 双击Group工具块进入 添加…

网络原理知识总结

一、网络模型 1.1 osi七层参考模型 物理层&#xff1a;连接通信链路、传输比特流数据链路层&#xff1a;数据封装成帧&#xff0c;在节点与节点间实现可靠物理地址寻址&#xff0c;进行差错校验、流量控制网络层&#xff1a;逻辑地址寻址&#xff0c;路由选择 IP(IPV4IPV6) I…

Oracle start with connect by prior 递归查询

基本语法 select … from tablename where 条件1 start with 条件2 connect by 条件3(PRIOR);条件1&#xff1a;相当于基本的筛选数据 条件2&#xff1a;递归查询起始条件 条件3&#xff1a;连接条件&#xff0c;其中用PRIOR表示上一条记录的结果作为本次查询的条件&#xff0…

后端开发刷题 | 二叉树的前序遍历

描述 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 数据范围&#xff1a;二叉树的节点数量满足 1≤n≤100 &#xff0c;二叉树节点的值满足 1≤val≤100&#xff0c;树的各节点的值各不相同 示例 1&#xff1a; 示例1 输入&#xff1a; {1,#,2,3} 返…

攻击实现摄像头、gvm、openvas安装

网络安全 前言1、kali 发现主机2、[mac地址](https://mac.bmcx.com/#google_vignette)查询3、openvas 安装openvas使用1、添加主机目标2、新建扫描任务3、开始扫描4、查看扫描信息。如果有cve那说明可用 前言 全国网络安全标准化技术委员会&#xff1a;https://www.tc260.org.…