超级简单的springboot整合springsecurity oauth2第三方登录

news2024/11/28 23:53:38

前言

springboot整合springsecurity oauth2进行第三方登录,例如qq、微信、微博。网上一堆教程,并且很多都是旧版本的,篇幅又长,哔哩吧啦一大堆,就算你搞下来了,等下次版本升级或变更一下,你又不知道怎么改了。这篇文章主要是分享一下我自己是如何实现第三方登录的,其实很简单~~~

1.引入依赖

新建一个springboot工程(过程省略),引入springseurity的相关依赖

<properties>
    <java.version>17</java.version>
    <spring-security.version>5.7.9</spring-security.version>
</properties>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

如果你想快速开始项目直接复制依赖即可,这一节下面的解释可以不用看。下面主要是教你如何阅读文档

这里spring-security版本是5.7.9,我这里之所有设置版本号,主要是为了查看对应的文档。

在这里插入图片描述

有人可能会说,你怎么知道要引入这两个依赖?

这是我的一个总结,如果说想使用第三方的工具,首先要看它的官方文档,主要看什么呢?

  1. 它的简介,有助于了解工具的实现的功能
  2. 快速开始,任何一个工具使用起来都很简单,只是随着你的需求越多,其配置就越复杂罢了
  3. 提供的demo

有人说文档都是英文的看不懂,怎么办?

看不懂就去翻译

翻译了之后又看不懂呢?

那就去百度,结合百度上的一些文章,它可以让你更快的掌握这个工具。

话说回来,怎么知道引入这些依赖。说真的,springsecurity的文档并不友好,首先我去了 ”OAuth2“这个菜单下找,发现并没有,然后就到它提供的demo上找

在这里插入图片描述

https://github.com/spring-projects/spring-security-samples/tree/main/servlet/spring-boot/java/oauth2/login

因为项目是使用gradle构建的,所以看build.gradle这个文件就可以找到相关的依赖,我们发现有这样的一段代码

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'

	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.springframework.security:spring-security-test'

	integTestImplementation 'net.sourceforge.htmlunit:htmlunit'
}

其实只需引入”spring-boot-starter-oauth2-client“这个依赖即可,但如果你想实现账号密码登录,那就得引入”spring-boot-starter-security“,一般情况下最好都引入一下。

2.引入配置

这是一个github的配置,因为springsecurity集成了github和 google 登录,因此配置可以少配置一些

server:
  port: 8877

spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: 你的id
            client-secret: 你的secret

但是如果你是其它第三方登录,比如微博、微信,那你需要以下完整配置,依然以github为例

server:
  port: 8877

spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: 你的id
            client-secret: 你的secret
            redirect-uri: http://localhost:8877/login/oauth2/code/github
            scope: repo,user
        provider:
          github:
            authorization-uri: https://github.com/login/oauth/authorize
            token-uri: https://github.com/login/oauth/access_token
            user-info-uri: https://api.github.com/user
            user-name-attribute: login

github的client-id和client-secret可以自行申请,只要注册一个git账号,然后登录账号申请即可,很简单,如果实在不知道,可以留言~~

如果你想快速开始项目,直接加上这个配置即可,后面的内容是关于这份配置的介绍

https://docs.spring.io/spring-security/reference/5.7/servlet/oauth2/login/core.html

上面这些配置,在你申请第三方密钥后都可以找得到,下面就简单说一下几个点

  1. registration:github和provider:github要对应,不能是provider:github1
  2. redirect-uri回调地址格式固定,localhost:8877表示你的域名,github要与registration:github中的github对应
  3. user-name-attribute,就是说返回的用户信息,那个字段是用户名字段

user-name-attribute: login 的作用是告诉 Spring Security OAuth2 将 OAuth2 提供商返回的用户信息中的 login 属性视为用户的用户名。

如果不设置 user-name-attribute,Spring Security OAuth2 将默认使用 OAuth2 提供商返回的用户信息中的 sub 属性作为用户的用户名。

在 GitHub 的用户信息响应中,sub 属性是用户的唯一标识符,而 login 属性是用户的用户名。因此,如果将 user-name-attribute 设置为 login,Spring Security OAuth2 将使用 login 属性的值作为用户的用户名。

如果不设置 user-name-attribute,Spring Security OAuth2 将使用默认的 sub 属性作为用户的用户名。这可能适用于大多数 OAuth2 提供商,因为它们通常会返回一个唯一的用户标识符。

根据您的应用程序的需求和使用的 OAuth2 提供商,您可以选择设置适当的 user-name-attribute 值,以确保在用户认证和授权过程中使用正确的用户名。

如果不设置 user-name-attribute 并且默认的 sub 属性在返回的用户信息中不存在,可能会导致用户认证和授权过程中的问题。因此,正确配置 user-name-attribute 是确保 Spring Security OAuth2 可以正确识别和使用用户用户名的重要步骤。

3.开启oauth2登录

新建一个SecurityConfig文件,内容如下

@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            http	//表示所有请求都需要验证
                    .authorizeHttpRequests(authorize -> authorize
                            .anyRequest().authenticated()
                    )
                //  运行请求后会自动跳转到第三方登录界面
                    .oauth2Login(Customizer.withDefaults());
            return http.build();
    }

}

这个也是配置,这个配置也很重要,内容也很多,这里就不展开讲了

你只要按照这三个步骤来,就可以实现第三方登录的功能了

下面演示看看

我在浏览器输入:http://localhost:8877,自动跳转到

在这里插入图片描述

输入账号密码后会自动跳回当前地址

那么接下来的问题就是登录成功后如何获取登录的用户信息?

写一个控制器接口

@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {

    @GetMapping("a")
    public Object test(){
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        return authentication.getPrincipal();
    }
}

文档中有说到的,当用户登录成功后,用户信息存储到哪里

https://docs.spring.io/spring-security/reference/5.7/servlet/authentication/architecture.html

我们运行一下接口http://localhost:8877/test/a,就会获取到你登录的git账号信息

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

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

相关文章

5分频【FPGA】

所以数据对齐晶振。 从第一个晶振开始&#xff1a; 5分频&#xff1a; 2.5晶振高电平&#xff0c;2.5晶振低电平 clk1是 32 clk2是23 需要 clk2下降沿【拉低】clk1上升沿【拉高】 clk_out clk1 & clk2; 推荐5分频&#xff1a;

一文带你速通Seata的XA模式

目录 XA规范协议 基本介绍 分布式事务处理模型角色 两阶段提交 Seata的XA的模式 基本介绍 具体使用 小结 XA规范协议 基本介绍 在讲解Seate中的XA模式之前我们先来了解了解什么是XA规范。XA 规范 是 X/Open 组织定义的分布式事务处理&#xff08;DTP&#xff0c;Distr…

计算机毕业设计项目选题推荐(免费领源码)java+Springboot+Mysql邻家优选超市线上线下购物系统小程序92713

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

运维那些事儿|2023年,运维还有出路吗?

作为一名运维&#xff0c;不知道你有没有这样的感受。 觉得自己的工作没什么成长空间。每天装个系统、跑个机房、跑个脚本&#xff0c;忙来忙去也没忙出来什么名堂&#xff0c;含金量低不说&#xff0c;薪资也一直没见涨&#xff0c;所以你开始陷入迷茫&#xff0c;会疑惑&…

第二证券:机构策略:大盘有望继续走出震荡攀升走势

3053点上方途径压力较为明显&#xff0c;短期内打破3053点上方途径需求量能的不断释放&#xff0c;周三两市成交量再度打破万亿&#xff0c;这为后市向上打破奠定了基础&#xff0c;短线大盘打破前期3053点上方途径难以一蹴即至&#xff0c;但先行目标科创100、国证2000现已光复…

【Linux C IO多路复用】多用户聊天系统

目录 Server-Client mutiplexingServer mutiplexingClient mutiplexing Server-Client 在Linux系统中&#xff0c;IO多路复用是一种机制&#xff0c;它允许一个进程能够监视多个文件描述符&#xff08;sockets、pipes等&#xff09;的可读、可写和异常等事件。这样&#xf…

基于RTLS的资产追踪

第1章 什么是资产追踪&#xff1f; 资产跟踪使最终用户能够监控和管理物理对象&#xff0c;无论是在配送中心、制造工厂、仓库还是医疗保健环境中&#xff0c;仅举几个可能的场景。 资产跟踪通常由硬件和软件组成&#xff0c;旨在报告物理对象的状态&#xff0c;特别强调位置…

目标检测标注的时代已经过去了?

在快速发展的机器学习领域&#xff0c;有一个方面一直保持不变&#xff1a;繁琐和耗时的数据标注任务。无论是用于图像分类、目标检测还是语义分割&#xff0c;长期以来人工标记的数据集一直是监督学习的基础。 然而&#xff0c;由于一个创新性的工具 AutoDistill&#xff0c;这…

Kakao账号注册全流程,如何Kakao多开?

Kakao是目前韩国地区最流行的通讯生活服务软件&#xff0c;相当于我们国内的微信&#xff0c;如果您的业务正准备或者正在进军这个区域&#xff0c;那么少不了需要注册并使用这个平台&#xff0c;甚至需要Kakao多开&#xff08;多账号同时管理与使用&#xff09;&#xff0c;本…

C# OpenCvSharp 通过特征点匹配图片

SIFT匹配 SURF匹配 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; using static System.Net…

Presentation Prompter 5.4.2(mac屏幕提词器)

Presentation Prompter是一款演讲辅助屏幕提词器软件&#xff0c;旨在帮助演讲者在公共演讲、主持活动或录制视频时更加流畅地进行演讲。以下是Presentation Prompter的一些特色功能&#xff1a; 提供滚动或分页显示&#xff1a;可以将演讲稿以滚动或分页的形式显示在屏幕上&a…

奇安信360天擎getsimilarlist存在SQL注入漏洞

奇安信360天擎getsimilarlist存在SQL注入漏洞 一、产品描述二、漏洞描述三、漏洞复现1.手动复现2.自动化复现①nulei扫描yaml ②小龙POC检测工具下载地址 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的…

Studio One6最新中文特别版下载安装教程

PreSonus Studio One是PreSonus出品的一款功能强大的音乐创作软件。主要为用户提供音乐创作、录音、编辑、制作等功能。它可以让你创造音乐&#xff0c;无限的轨道&#xff0c;无限的MIDI和乐器轨道&#xff0c;虚拟乐器和效果通道&#xff0c;这些都是强大和完美的。在Studio …

sprinboot使用自定义注解切面 aop aspectj

sprinboot使用自定义注解切面 主要依赖定义注解接口定义切面使用注解打印切面获取参数 主要依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--切面依赖…

时间序列预测:深度学习、机器学习、融合模型、创新模型实战案例(附代码+数据集+原理介绍)

本文介绍->给大家推荐一下我的时间序列预测实战专栏&#xff0c;本专栏平均质量分98分&#xff0c;而且本专栏目前免费阅读。其中涉及机器学习、深度学习、融合模型、个人创新模型、数据分析等一系列有关时间序列的内容&#xff0c;其中的实战案例不仅有简单的模型类似于机器…

STM32F407-Discovery的硬件FPU

本文基于STM32 HAL 库版本&#xff1a;STM32Cube_FW_F4_V1.27.0 1. STM32F407的FPU简介 FPU&#xff1a;Float Point Unit&#xff0c;也就是浮点运算单元。如果是定点 CPU&#xff08;没有 FPU 的 CPU&#xff09;计算浮点数&#xff0c;则按照 IEEE-754 标准&#xff0c;完…

UltraEdit v22.0.0.19(高级文本编辑器)

UltraEdit是一款多功能文本编辑器&#xff0c;该软件功能强大&#xff0c;界面友好&#xff0c;使用方便&#xff0c;支持语法高亮、代码折叠、宏等高级功能&#xff0c;适用于编辑文本、十六进制、ASCII码等多种类型的文件。 UltraEdit v22.0.0.19(高级文本编辑器) UltraEd…

硬盘有未分配空间C盘扩展卷却显示灰色不能扩展

买的惠普暗影精灵9新电脑&#xff0c;512G硬盘&#xff0c;回来后我寻思把盘分成三个盘&#xff0c;没注意点到哪了发现C盘就剩下了10G还有200多G未分配的空间&#xff0c;但C盘却无法扩展卷&#xff08;如下图&#xff09;。问了之前一个老哥后才知道是因为C盘和未分配磁盘直接…

ASO优化之如何进行ios和Android关键词研究1

应用商店优化包含许多不同子领域&#xff0c;其中之一就是关键词研究。适当的关键词研究会将应用带入应用程序商店的搜索结果中&#xff0c;并且搜索排名会产生免费的自然下载。 1、准备关键词研究。 为了让研究打下坚实的基础&#xff0c;需要创建一个框架。拿一张纸或制作一…

Vue3 + Naive-ui Data Table 分页页码显示不全

当使用naive-ui 表格并且使用分页组件的时候 需要增加 remote