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

编程入门 行业动态 更新时间:2024-10-12 05:53:50

超级简单的springboot整合springsecurity oauth2<a href=https://www.elefans.com/category/jswz/34/1770258.html style=第三方登录"/>

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

前言

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上找

因为项目是使用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: 8877spring:security:oauth2:client:registration:github:client-id: 你的idclient-secret: 你的secret

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

server:port: 8877spring:security:oauth2:client:registration:github:client-id: 你的idclient-secret: 你的secretredirect-uri: http://localhost:8877/login/oauth2/code/githubscope: repo,userprovider:github:authorization-uri: : : : login

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

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

.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 {@Beanpublic 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();}
}

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

.7/servlet/authentication/architecture.html

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

更多推荐

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

本文发布于:2023-11-15 19:40:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1605191.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:第三方   简单   springsecurity   springboot

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!