Spring Boot 实现微信、QQ 绑定登录

news2025/2/27 5:26:37

文章目录

      • 1. 项目环境
      • 2. 创建Spring Boot项目
      • 3. 配置微信和QQ开发平台
      • 4. 配置Spring Security
      • 5. 配置Spring Security
      • 6. 创建登录和主页控制器
      • 7. 创建视图
      • 8. 运行项目
      • 9. 处理用户信息
      • 结论

在这里插入图片描述

🎉欢迎来到SpringBoot框架学习专栏~


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:SpringBoot
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

在现代应用程序中,第三方登录(如微信和QQ登录)已成为提高用户注册和登录体验的重要功能。本文将介绍如何使用Spring Boot实现微信和QQ的绑定登录功能。

在这里插入图片描述

1. 项目环境

我们将使用以下技术栈来实现这个功能:

  • Spring Boot
  • Spring Security
  • OAuth2 客户端库
  • 微信和QQ的开放平台

2. 创建Spring Boot项目

首先,使用Spring Initializr创建一个新的Spring Boot项目,选择以下依赖:

  • Spring Web
  • Spring Security
  • OAuth2 Client

3. 配置微信和QQ开发平台

在微信和QQ开放平台注册应用,获取应用的AppID和AppSecret。记录下这些信息,因为它们将在我们的Spring Boot应用中使用。

4. 配置Spring Security

application.ymlapplication.properties中配置微信和QQ的OAuth2客户端信息:

spring:
  security:
    oauth2:
      client:
        registration:
          qq:
            client-id: your-qq-app-id
            client-secret: your-qq-app-secret
            client-name: QQ
            provider: qq
            redirect-uri: "{baseUrl}/login/oauth2/code/qq"
            authorization-grant-type: authorization_code
            scope: get_user_info
        provider:
          qq:
            authorization-uri: https://graph.qq.com/oauth2.0/authorize
            token-uri: https://graph.qq.com/oauth2.0/token
            user-info-uri: https://graph.qq.com/user/get_user_info
            user-name-attribute: openid

          wechat:
            client-id: your-wechat-app-id
            client-secret: your-wechat-app-secret
            client-name: WeChat
            redirect-uri: "{baseUrl}/login/oauth2/code/wechat"
            authorization-grant-type: authorization_code
            scope: snsapi_login
        provider:
          wechat:
            authorization-uri: https://open.weixin.qq.com/connect/qrconnect
            token-uri: https://api.weixin.qq.com/sns/oauth2/access_token
            user-info-uri: https://api.weixin.qq.com/sns/userinfo
            user-name-attribute: openid

5. 配置Spring Security

创建一个Spring Security配置类,配置OAuth2登录:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/login**", "/css/**", "/js/**", "/images/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .oauth2Login()
                .loginPage("/login")
                .defaultSuccessUrl("/home")
                .failureUrl("/login?error=true")
                .userInfoEndpoint()
                    .userService(oauth2UserService());
    }

    @Bean
    public OAuth2UserService<OAuth2UserRequest, OAuth2User> oauth2UserService() {
        DefaultOAuth2UserService delegate = new DefaultOAuth2UserService();
        return request -> {
            OAuth2User oauth2User = delegate.loadUser(request);
            // 自定义用户信息处理
            return oauth2User;
        };
    }
}

6. 创建登录和主页控制器

创建控制器来处理登录和主页的请求:

@Controller
public class MainController {

    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @GetMapping("/home")
    public String home(Model model, @AuthenticationPrincipal OAuth2User oauth2User) {
        model.addAttribute("name", oauth2User.getAttribute("name"));
        return "home";
    }
}

7. 创建视图

创建登录页(src/main/resources/templates/login.html):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
</head>
<body>
    <h1>Login with</h1>
    <a href="/oauth2/authorization/qq">QQ</a>
    <a href="/oauth2/authorization/wechat">WeChat</a>
</body>
</html>

创建主页(src/main/resources/templates/home.html):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home</title>
</head>
<body>
    <h1>Welcome, ${name}</h1>
</body>
</html>

8. 运行项目

启动Spring Boot应用,访问http://localhost:8080/login,选择QQ或微信登录,即可实现第三方登录功能。

9. 处理用户信息

在实际应用中,我们可能需要将第三方用户信息与本地用户进行绑定。可以在OAuth2UserService中进行处理,将第三方用户信息保存到本地数据库,并进行用户绑定。

@Bean
public OAuth2UserService<OAuth2UserRequest, OAuth2User> oauth2UserService() {
    DefaultOAuth2UserService delegate = new DefaultOAuth2UserService();
    return request -> {
        OAuth2User oauth2User = delegate.loadUser(request);
        String clientRegistrationId = request.getClientRegistration().getRegistrationId();
        
        // 根据不同的登录方式处理用户信息
        if ("qq".equals(clientRegistrationId)) {
            String openid = oauth2User.getAttribute("openid");
            // 根据openid处理用户信息
        } else if ("wechat".equals(clientRegistrationId)) {
            String openid = oauth2User.getAttribute("openid");
            // 根据openid处理用户信息
        }
        
        return oauth2User;
    };
}

结论

通过Spring Boot整合微信和QQ的OAuth2登录,我们可以实现一个灵活、强大的第三方登录系统,提高用户体验和系统安全性。在实际应用中,还可以根据具体需求进行更多的定制和扩展,如处理用户绑定、实现单点登录等。希望本文能够帮助你快速实现微信和QQ的绑定登录功能。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

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

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

相关文章

JAVA复习4

目录 44、定义 int x5; 执行 int yx; 和 xy;&#xff0c;x 和 y 分别为&#xff08; B &#xff09;。 45、下列内容描述错误的是&#xff08; C &#xff09;。 46、以下 Java 语句在编译时不通过的是 (A) 47、在 Java 中&#xff0c;Scanner 类提供控制台获取键盘输入的功…

皇河将相董事长程灯虎出席第二十四届世纪大采风并获奖

仲夏时节,西子湖畔。第二十四届世纪大采风品牌人物年度盛典于6月16日至17日在杭州东方文化园隆重举行。本届盛典由亿央网、《华夏英才》电视栏目联合多家媒体共同主办,中世采文化发展集团承办,意尔康股份有限公司、宸咏集团协办,汇聚了来自全国政、商、产、学、研、媒等各界代表…

4.1 四个子空间的正交性

一、四个子空间的正交性 如果两个向量的点积为零&#xff0c;则两个向量正交&#xff1a; v ⋅ w v T w 0 \boldsymbol v\cdot\boldsymbol w\boldsymbol v^T\boldsymbol w0 v⋅wvTw0。本章着眼于正交子空间、正交基和正交矩阵。两个子空间的中的向量&#xff0c;一组基中的向…

【2024最新版】Java JDK安装配置全攻略:图文详解

目录 1. 引言2. 准备工作2.1 **确定操作系统**2.2 **检查系统要求**2.3 **下载JDK安装包**3. 安装步骤&#xff08;以Windows系统为例&#xff09;4. 配置环境变量4.1 jdk配置验证4.2 **配置JAVA_HOME环境变量**4.3 **配置Path环境变量**4.4 验证jdk是否配置成功 5. 结语 1. 引…

MySQL命名规范(自用)

MtySQL命名规范 基本通用规范 1.【推荐】关键字必须大写 所有关键字必须大写&#xff0c;如&#xff1a;INSERT、UPDATE、DELETE、SELECT及其子句&#xff0c;IF……ELSE、CASE、DECLARE等 2.【强制】字段和建表必须写备注 COMMENT写备注 3.【强制】字母数字下划线 采用26个英…

CentOS 7、Debian、Ubuntu,这些是什么意思

CentOS 7、Debian、Ubuntu 都是基于 Linux 内核的操作系统&#xff0c;它们各自有不同的特性和用途。以下是对它们的详细解释&#xff1a; CentOS 7 CentOS&#xff08;Community ENTerprise Operating System&#xff09; 是一个基于开源的 Linux 发行版。CentOS 7 是 CentOS …

JavaScript的学习之旅之初始JS

目录 一、认识三个常见的js代码 二、js写入的第二种方式 三、js里内外部文件 一、认识三个常见的js代码 <script>//写入js位置的第一个地方// 控制浏览器弹出一个警告框alert("这是一个警告");// 在计算机页面输入一个内容&#xff08;写入body中&#xff…

支付系统的渠道路由架构设计

图解支付系统的渠道路由设计 渠道路由是引导流量路径的关键&#xff0c;其设计至关重要。本文详解渠道路由概念、必要性及形态&#xff0c;并分享一个高效实用的基于规则的渠道路由设计方案。 注&#xff1a;有些公司称渠道为通道&#xff0c;都是一个意思&#xff0c;为方便起…

(南京观海微电子)——DC-DC和LDO的原理及应用区别

LDO: 低压差线性稳压器&#xff0c;故名思意为线性的稳压器&#xff0c;仅能使用在降压应用中&#xff0c;也就是输出电压必需小于输入电压。 优点&#xff1a;稳定性好&#xff0c;负载响应快&#xff0c;输出纹波小。 缺点&#xff1a; 效率低&#xff0c;输入输出的电压…

Spring响应式编程之Reactor介绍

Reactor介绍 1、异步执行技术2、实现方式 响应式编程&#xff08;Reactive Programming&#xff09;是一种面向数据流和变化传播的编程范式。Java中的Reactor是一个用于响应式编程的库&#xff0c;它建立在Reactive Streams规范之上&#xff0c;旨在帮助开发者构建非阻塞的、高…

vue登陆密码加密,java后端解密

前端 安装crypto-js npm install crypto-js加密 //引入crypto-js import CryptoJS from crypto-js;/** ---密码加密 start--- */ const SECRET_KEY CryptoJS.enc.Utf8.parse("a15q8f6s5s1a2v3s"); const SECRET_IV CryptoJS.enc.Utf8.parse("a3c6g5h4v9sss…

项目-博客驿站测试报告

测试用例设计 功能测试 该部分主要围绕对于博客系统的增删改查, 文章通过性审核, 关注功能等进行测试, 还进行了其它一些探索性的测试. 以上是作者设计的全部用例. BUG发现: 问题1: 当多端同时操作同一篇文章BUG 环境: Windows11, Edge和Chrome浏览器 复现步骤: 1.先使用Edg…

《三国:谋定天下》成为了SLG游戏现象级的成功案例

原标题&#xff1a;《三国&#xff1a;谋定天下》引领SLG游戏新潮流&#xff0c;B站股价五个飙升了30% 易采游戏网6月23日&#xff1a;B站作为年轻人喜爱的文化社区和视频平台&#xff0c;再次用一款新的游戏证明了其在游戏发行领域的独到眼光与强大实力。最近大火的策略角色扮…

VBA学习(17):使用条件格式制作Excel聚光灯

今天给大家分享的表格小技巧是制作聚光灯。 先说一下啥是聚光灯。所谓聚光灯&#xff0c;可以简单理解为对工作表的行列填充颜色&#xff0c;突出显示被选中的单元格&#xff0c;仿佛该单元格被聚光灯照亮似的。聚光灯有助于肉眼识别所选中的单元格或区域&#xff0c;提高数据…

Repair LED lights

Repair LED lights 修理LED灯&#xff0c;现在基本用灯带&#xff0c;就是小型LED灯串联一起的 1&#xff09;拆旧灯条&#xff0c;这个旧的是用螺丝拧的产品 电闸关掉。 2&#xff09;五金店买一个&#xff0c;这种是磁铁吸附的产品 现在好多都是铝线啊。。。 小部件&#x…

2024最新最全的车载测试教程__各模块测试用例

二、设计用例方法 1.测试用例设计前&#xff1a; a.仔细认真研读prd、理解prd b.质疑prd、有困惑或者想法的点做好记录&#xff0c;可以一次性和产品沟通 2.设计中&#xff1a; 成282 a.根据结构化思维&#xff0c;设计xmind i全链路正向功能点、子链路功能点 ⅱ.考虑业…

15.树形虚拟列表实现(支持10000+以上的数据)el-tree(1万+数据页面卡死)

1.问题使用el-tree渲染的树形结构&#xff0c;当数据超过一万条以上的时候页面卡死 2.解决方法&#xff1a; 使用vue-easy-tree来实现树形虚拟列表&#xff0c;注意&#xff1a;vue-easy-tree需要设置高度 3.代码如下 <template><div class"ve-tree" st…

大模型参数高效微调学习笔记

大模型参数高效微调学习笔记 github地址 billbill链接 1.分类 图中有五个大类&#xff1a; selective&#xff08;选择性微调&#xff09;&#xff1a;BitFit&#xff0c;Attention Tuningsoft prompts&#xff08;提示微调&#xff09;&#xff1a;Prompt-tuning&#xff0c…

实战指南:部署Elasticsearch 8.4.1与Kibana 8.4.1并集成IK分词器

首先拉取elasticsearch和kibana镜像 docker pull elasticsearch:8.4.1 docker pull kibana:8.4.1如果遇到镜像拉去不下来&#xff0c;遇到如下问题&#xff1a; [ERROR] error pulling image configuration: Get " https://production.cloudflare.docker.com/registry-v…

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行&#xff0c;所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --…