SpringBoot整合justauth实现多种方式的第三方登陆

目录

0.准备工作

1.引入依赖

2.yml文件

3. Controller代码

 4.效果

参考


0.准备工作

你需要获取三方登陆的client-idclient-secret

github为例

申请地址:Sign in to GitHub · GitHub

1.引入依赖

<?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>2.3.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zhengqing</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><justauth-spring-boot.version>1.1.0</justauth-spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 添加适用于生产环境的功能,如性能指标和监测等功能 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- ====================================================== --><!-- reids --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 对象池,使用redis时必须引入 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><!-- oauth工具类 --><dependency><groupId>com.xkcoding</groupId><artifactId>justauth-spring-boot-starter</artifactId><version>${justauth-spring-boot.version}</version></dependency><!-- lombok插件 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.8</version></dependency><!-- https://mvnrepository.com/artifact/com.google.guava/guava --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>29.0-jre</version></dependency></dependencies><build><!-- 注:maven默认是不编译,因此加上如下resources才会生产对应的xml文件 目的:解决mybatis映射关系不对应问题  start =============== --><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory></resource></resources><testResources><testResource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></testResource></testResources><!-- 注:maven默认是不编译,因此加上如下resources才会生产对应的xml文件 目的:解决mybatis映射关系不对应问题  end =============== --><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2.yml文件

server:port: 90servlet:context-path: /demospring:application:name: demo# ======================== ↓↓↓↓↓↓ redis相关配置 ↓↓↓↓↓↓ ===============================redis:# Redis服务器地址host: 127.0.0.1# Redis服务器连接端口port: 6379# 连接超时时间(毫秒timeout: 10000ms# Redis服务器连接密码(默认为空)password:# Redis数据库索引(默认为0)database: 1lettuce:pool:# 连接池最大连接数(使用负值表示没有限制) 默认 8max-active: 8# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1max-wait: -1ms# 连接池中的最大空闲连接 默认 8max-idle: 8# 连接池中的最小空闲连接 默认 0min-idle: 0cache:# 一般来说是不用配置的,Spring Cache 会根据依赖的包自行装配type: redisjustauth:enabled: truetype:github:client-id: Ov23l*********T6zyhgclient-secret: fd82534****************59aefacredirect-uri: http://127.0.0.1:90/demo/oauth/github/callback
#    qq:
#      client-id: 10******85
#      client-secret: 1f7d************************d629e
#      redirect-uri: http://127.0.0.1/demo/oauth/qq/callback
#    wechat:
#      client-id: wxdcb******4ff4
#      client-secret: b4e9dc************************a08ed6d
#      redirect-uri: http://127.0.0.1/demo/oauth/wechat/callback
#    google:
#      client-id: 716******17-6db******vh******ttj320i******userco******t.com
#      client-secret: 9IBorn************7-E
#      redirect-uri: http://127.0.0.1/demo/oauth/google/callback
#    microsoft:
#      client-id: 7bdce8******************e194ad76c1b
#      client-secret: Iu0zZ4************************tl9PWan_.
#      redirect-uri: https://127.0.0.1/demo/oauth/microsoft/callback
#    mi:
#      client-id: 288************2994
#      client-secret: nFeTt89************************==
#      redirect-uri: http://127.0.0.1/demo/oauth/mi/callback
#    wechat_enterprise:
#      client-id: ww58******f3************fbc
#      client-secret: 8G6PCr00j************************rgk************AyzaPc78
#      redirect-uri: http://127.0.0.1/demo/oauth/wechat_enterprise/callback
#      agent-id: 1*******2cache:type: redisprefix: 'SOCIAL::STATE::'timeout: 1h

3. Controller代码

package com.zhengqing.demo;import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.xkcoding.justauth.AuthRequestFactory;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.config.AuthSource;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.utils.AuthStateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** <p> 第三方登录 Controller </p>* @description : 可参考[Spring Boot 快速集成第三方登录功能](https://xkcoding.com/2019/05/22/spring-boot-login-with-oauth.html)*/
@Slf4j
@RestController
@RequestMapping("/oauth")
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class OauthController {private final AuthRequestFactory factory;/*** 登录类型*/@GetMappingpublic Map<String, String> loginType() {List<String> oauthList = factory.oauthList();return oauthList.stream().collect(Collectors.toMap(oauth -> oauth.toLowerCase() + "登录",oauth -> "http://127.0.0.1:90/demo/oauth/login/" + oauth.toLowerCase()));}/*** 登录** @param oauthType 第三方登录类型* @param response  response* @throws IOException*/@RequestMapping("/login/{oauthType}")public void renderAuth(@PathVariable String oauthType, HttpServletResponse response)throws IOException {AuthRequest authRequest = factory.get(getAuthSource(oauthType));response.sendRedirect(authRequest.authorize(oauthType + "::" + AuthStateUtils.createState()));}/*** 登录成功后的回调** @param oauthType 第三方登录类型* @param callback  携带返回的信息* @return 登录成功后的信息*/@RequestMapping("/{oauthType}/callback")public AuthResponse login(@PathVariable String oauthType, AuthCallback callback) {AuthRequest authRequest = factory.get(getAuthSource(oauthType));AuthResponse response = authRequest.login(callback);log.info("【response】= {}", JSONUtil.toJsonStr(response));return response;}private AuthSource getAuthSource(String type) {if (StrUtil.isNotBlank(type)) {return AuthSource.valueOf(type.toUpperCase());} else {throw new RuntimeException("不支持的类型");}}}

 4.效果

 

参考

  1. JustAuth 项目地址:https://github.com/justauth/JustAuth
  2. justauth-spring-boot-starter 地址:https://github.com/justauth/justauth-spring-boot-starter
  3. frp 内网穿透项目地址:https://github.com/fatedier/frp
  4. frp 内网穿透官方中文文档:https://github.com/fatedier/frp/blob/master/README_zh.md
  5. Frp 实现内网穿透:https://zhuanlan.zhihu.com/p/45445979
  6. QQ 互联文档:http://wiki.connect.qq.com / 准备工作_oauth2-0
  7. 微信开放平台文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN
  8. GitHub 第三方登录文档:https://developer.github.com/apps/building-oauth-apps/
  9. 谷歌 Oauth2 文档:https://developers.google.com/identity/protocols/OpenIDConnect
  10. 微软 Oauth2 文档:https://docs.microsoft.com/zh-cn/graph/auth-v2-user
  11. 小米开放平台账号服务文档:https://dev.mi.com/console/doc/detail?pId=707

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行车记录仪文件夹“0字节”现象解析与恢复策略

一、行车记录仪文件夹“0字节”现象描述 行车记录仪作为现代驾驶中的必备设备&#xff0c;其储存的视频数据对于事故记录和取证至关重要。然而&#xff0c;有时车主们可能会遇到这样一个问题&#xff1a;行车记录仪的某个文件夹内的文件突然变成了0字节大小&#xff0c;无法正…

用于快速充电站的 AC/DC 转换器概述

电动汽车构成了未来实现可持续交通部门的有前途技术的主要部分。AC/DC 转换器是扩展和改进 EV 功能的骨干组件。本文概述了 AC/DC 转换器、充电站类型、传统两电平 (2L) AC/DC 转换器面临的问题以及使用多电平转换器 (MLC) 的重要性。 AC/DC 充电器示意图&#xff08;&#xff…

北航数据结构与程序设计图部分选填题

一、 抓两个关键信息&#xff1a;无向图&#xff0c;邻接表。无向图中&#xff0c;边&#xff08;vi&#xff0c;vj&#xff09;要在vi的链表中记录一次&#xff0c;再以&#xff08;vj&#xff0c;vi&#xff09;的形式在vj的链表中记录一次。 每个边都要记录两次&#xff0c…

Linux机器通过Docker-Compose安装Jenkins发送Allure报告

目录 一、安装Docker 二、安装Docker Compose 三、准备测试用例 四、配置docker-compose.yml 五、启动Jenkins 六、配置Jenkins和Allure插件 七、创建含pytest的Jenkins任务 八、项目结果通知 1.通过企业微信通知 2.通过邮件通知 九、配置域名DNS解析 最近小编接到一…

Ollama深度探索:AI大模型本地部署的全面教程

目录 引言一、Ollama概述1、定义与定位2、核心功能3、技术优势4、应用场景 二、安装与配置1、系统要求2、安装方法3、配置指南4、启动Ollama服务 四、快速开始1、启动Ollama2、部署运行模型3、REEST API 五、自定义模型1、定制化的必要性2、使用Modelfile定制模型3、参数调整4、…

FPGA的基础仿真项目--七段数码管设计显示学号

一、设计实验目的 1&#xff0e; 了解数码管显示模块的工作原理。 2&#xff0e; 熟悉VHDL 硬件描述语言及自顶向下的设计思想。 3&#xff0e; 掌握利用FPGA设计6位数码管扫描显示驱动电路的方法。 二、实验设备 1. PC机 2.Cyclone IV FPGA开发板 三、扫描原理 下图所…

OSPF被动接口配置(华为)

#交换设备 OSPF被动接口配置 一、基本概念 OSPF被动接口&#xff0c;也称为抑制接口&#xff0c;即将路由器某一接口配置为被动接口后&#xff0c;该接口不会再接受和发送OSPF报文 二、使用场景 在路由器与终端相近或者直接相连的一侧配置被动接口 因为OSPF会定期发送报文…

【分类讨论】899. 有序队列

本文涉及知识点 分类讨论 LeetCode899. 有序队列 给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个&#xff0c;并把它加到字符串的末尾。 返回 在应用上述步骤的任意数量的移动后&#xff0c;字典序最小的字符串 。 示例 1&#xff1a; 输入&#xff1…

数据库设计文档编写

方法1&#xff1a;使用 Navicat 生成数据库设计文档 效果 先看简单的效果图&#xff0c;如果效果合适&#xff0c;大家在进行测试使用&#xff0c;不合适直接撤退&#xff0c;也不浪费时间。 随后在docx文档中生成目标字段的表格&#xff0c;选中全部(ctrla)进行复制(ctrlc)…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 02 Clos拓扑

本章回答以下问题&#xff1a; 什么是 Clos 拓扑&#xff0c;它与“接入 - 汇聚 - 核心”拓扑有何不同?Clos 拓扑的特征是什么?Clos 拓扑对数据中心网络的影响是什么? Clos拓扑 云原生数据中心基础设施的先行者们想要构建一种支持大规模水平扩展网络。 基本的Clos拓扑如图…

AI日报|我国人工智能核心产业规模已达5784亿元!阿里通义Qwen2成斯坦福大模型榜单最强开源模型!

⭐️搜索“可信AI进展“关注公众号&#xff0c;动手做AI Agent书籍&#xff0c;限量免费赠送&#xff01;快来参与吧&#xff5e; 文章链接&#xff1a; 福利来啦&#xff01;动手做AI Agent书籍&#xff0c;限量免费赠送&#xff01; 今日热点&#xff1a; 我国人工智能企业…

【2024亲测无坑】在Centos.7虚拟机上安装Oracle 19C

目录 一、安装环境准备 1、linux虚拟机安装 2、虚拟机快照 3、空间检查&软件上传 二、Oracle软件安装 1.preinstall安装及其他配置准备 2.oracle安装 三、数据库实例的安装 1.netca——网络配置助手 2.dbca——数据库配置助手 四、ORACLE 19C 在linux centos 7上…

Windows环境部署MySQL_8.4.0 LTS的部署安装、验证连接以及卸载全过程实操手册

前言&#xff1a; 什么是 MySQL MySQL 是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;目前属于Oracle 公司。MySQL 是一种关系型数据库管理系统&#xff0c;关系型数据库将数据保存在不同的表中&#xff0c;而不是将所有数据放在一个大仓库内&am…

【html】如何利用hbuilderX 开发一个自己的app并安装在手机上运行

引言&#xff1a; 相信大家都非常想开发一款自己的apk&#xff0c;手机应用程序&#xff0c;今天就教大家&#xff0c;如何用hbuilderX 开发一个自己的app并安装在手机上运行。 步骤讲解&#xff1a; 打开hbuilderX &#xff0c;选择新建项目 2.选择5app,想一个名字&#x…

双写一致性

双写一致性 当修改了数据库的数据也要同时更新缓存的数据&#xff0c;缓存和数据库的数据要保持一致。 注意这里是对数据库进行写操作而不是读操作&#xff0c;通常我们有两种方式完成这个写操作&#xff0c;分别是&#xff1a;先删除缓存再修改数据库 和 先修改数据库再删除…

SAP FICO 下载文件报错【调用数据提供商错误】

报错如下图所示&#xff1a; 解决办法&#xff1a; 当弹出保存文件的提示时&#xff0c;不要点击“记住我的决定”

qemu 安装ubuntu22.04虚拟机 -纯命令行-可ssh-带网络-编译安装 linux kernel-编译安装 kernel module

1&#xff0c;预备系统盘数据 1.1 下载光盘 注意需要 liver-server $ wget https://releases.ubuntu.com/22.04.4/ubuntu-22.04.4-live-server-amd64.iso 1.2 挂载并拷贝 $ sudo mkdir /mnt/iso_ubuntu-22.04.4-live-server-amd64 $ sudo mount ubuntu-22.04.4-live-ser…

蔚来汽车AI算法工程师,如何理解注意力?

大家好啊&#xff0c;我是董董灿。 今天分享一个上海蔚来汽车的AI算法岗位面试经验总结帖&#xff0c;面试岗位为算法工程师。 这次面试提到的问题&#xff0c;除了与实习相关内容和反问之外&#xff0c;面试官总共问了8个问题&#xff0c;主要集中在深度学习基础概念的理解上…

不见五陵高管墓,无花无酒锄做田

不见五陵高管墓&#xff0c;无花无酒锄做田 Golang 通用代码生成器仙童 2.4.0 电音仙女尝鲜版七已发布&#xff0c;此版本测试修复了 PostgreSQL 数据库自动反射功能。此版本更新修复了前端代码生成器&#xff0c;并修复了前端多对多界面的缺陷。PostgreSQL 的数据库反射功能刚…

ubuntu访问windows共享文件夹

方法: Ubuntu访问Windows共享文件夹的方法-CSDN博客 基于交换机的PC端网络通信_服务器交换机pc端-CSDN博客 补充说明&#xff1a; 在这里面输入&#xff1a; smb://192.168.0.30/WindowsShareToLinux