欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot實現(xiàn)微信掃碼登錄的示例代碼

 更新時間:2025年04月25日 10:07:31   作者:灰_灰丶灰  
本文主要介紹了SpringBoot實現(xiàn)微信掃碼登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

微信掃碼登錄的具體流程涉及多個步驟,從前期的配置到后端代碼的實現(xiàn),下面詳細(xì)介紹每個步驟:

1. 注冊和配置

  • 注冊微信賬號:首先在微信注冊一個賬號。
  • 獲取應(yīng)用的 AppID 和 AppSecret:在微信上創(chuàng)建應(yīng)用后,你會得到 AppID 和 AppSecret,這兩個值在后續(xù)步驟中會用到。
  • 配置授權(quán)回調(diào)域:在微信設(shè)置中,配置授權(quán)回調(diào)域名。這個域名是微信在用戶授權(quán)后回調(diào)的地址,例如 yourdomain.com

2. 前端代碼準(zhǔn)備

在前端頁面上添加一個按鈕或鏈接,讓用戶點(diǎn)擊后開始微信掃碼登錄流程。

<a href="/wechat/login" rel="external nofollow" >微信登錄</a>

3. 后端代碼實現(xiàn)

3.1 配置項目

首先,在 application.properties 文件中添加微信應(yīng)用的配置:

wechat.app-id=YOUR_APP_ID
wechat.app-secret=YOUR_APP_SECRET
wechat.redirect-uri=http://yourdomain.com/wechat/callback

3.2 創(chuàng)建微信掃碼登錄控制器

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.client.RestTemplate;

import java.util.UUID;

@Controller
public class WeChatLoginController {

    @Value("${wechat.app-id}")
    private String appId;

    @Value("${wechat.app-secret}")
    private String appSecret;

    @Value("${wechat.redirect-uri}")
    private String redirectUri;

    @GetMapping("/wechat/login")
    public String wechatLogin() {
        String state = UUID.randomUUID().toString();
        String wechatUrl = "https://open.weixin.qq.com/connect/qrconnect?appid=" + appId
                + "&redirect_uri=" + redirectUri
                + "&response_type=code&scope=snsapi_login&state=" + state;
        return "redirect:" + wechatUrl;
    }

    @GetMapping("/wechat/callback")
    public String wechatCallback(String code, String state, Model model) {
        String tokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId
                + "&secret=" + appSecret
                + "&code=" + code
                + "&grant_type=authorization_code";

        RestTemplate restTemplate = new RestTemplate();
        WeChatAccessTokenResponse response = restTemplate.getForObject(tokenUrl, WeChatAccessTokenResponse.class);

        if (response != null) {
            String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + response.getAccessToken()
                    + "&openid=" + response.getOpenId();
            WeChatUserInfo userInfo = restTemplate.getForObject(userInfoUrl, WeChatUserInfo.class);
            model.addAttribute("user", userInfo);
            return "userProfile";
        }

        return "error";
    }

    static class WeChatAccessTokenResponse {
        private String accessToken;
        private String openId;

        // Getters and setters
    }

    static class WeChatUserInfo {
        private String openId;
        private String nickname;
        private String sex;
        private String province;
        private String city;
        private String country;
        private String headimgurl;

        // Getters and setters
    }
}

3.3 創(chuàng)建用戶信息展示頁面

在 src/main/resources/templates 目錄下創(chuàng)建 userProfile.html 文件,用于顯示用戶信息:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User Profile</title>
</head>
<body>
<h1>User Profile</h1>
<div>
    <img th:src="${user.headimgurl}" alt="User Avatar"/>
    <p>Nickname: <span th:text="${user.nickname}"></span></p>
    <p>Country: <span th:text="${user.country}"></span></p>
    <p>Province: <span th:text="${user.province}"></span></p>
    <p>City: <span th:text="${user.city}"></span></p>
</div>
</body>
</html>

4. 執(zhí)行流程

  • 用戶點(diǎn)擊微信登錄鏈接:用戶點(diǎn)擊前端頁面上的微信登錄鏈接,瀏覽器會重定向到微信的授權(quán)頁面。
  • 用戶掃碼并授權(quán):用戶在微信授權(quán)頁面掃碼并授權(quán),微信會將授權(quán)結(jié)果(包含授權(quán)碼 code)回調(diào)到你配置的回調(diào)URL。
  • 后端處理回調(diào)請求:后端接收到微信的回調(diào)請求,通過授權(quán)碼 code 獲取訪問令牌 access_token 和用戶的 openid。
  • 獲取用戶信息:使用 access_token 和 openid 調(diào)用微信API獲取用戶詳細(xì)信息。
  • 展示用戶信息:將獲取到的用戶信息展示在頁面上。

5. 處理異常和安全性

實際應(yīng)用中,處理異常和安全性是非常重要的,包括但不限于:

  • 防止CSRF攻擊:使用state參數(shù)驗證請求的合法性。
  • 處理網(wǎng)絡(luò)異常:網(wǎng)絡(luò)請求可能會失敗,需要處理超時和錯誤響應(yīng)。
  • 存儲用戶信息:將用戶信息存儲在數(shù)據(jù)庫中,便于后續(xù)使用。

以上步驟基本上可以實現(xiàn)微信掃碼登錄功能。如果需要更詳細(xì)的實現(xiàn),可以參考微信開放平臺的官方文檔。

到此這篇關(guān)于SpringBoot實現(xiàn)微信掃碼登錄的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot 微信掃碼登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)置httponly?cookie的實現(xiàn)示例

    Java設(shè)置httponly?cookie的實現(xiàn)示例

    本文主要介紹了Java設(shè)置httponly?cookie的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • SpringBoot Session共享實現(xiàn)圖解

    SpringBoot Session共享實現(xiàn)圖解

    這篇文章主要介紹了SpringBoot Session共享實現(xiàn)圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 如何有效管理JVM中的垃圾?

    如何有效管理JVM中的垃圾?

    今天給大家?guī)淼氖顷P(guān)于Java虛擬機(jī)的相關(guān)知識,文章圍繞著如何有效管理JVM中的垃圾展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Spring Data的Domain Event的用法詳解

    Spring Data的Domain Event的用法詳解

    這篇文章主要介紹了Spring Data的Domain Event的用法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java設(shè)計模式之享元模式

    Java設(shè)計模式之享元模式

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計模式之享元模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • MyBatis的通俗理解:SqlSession.getMapper()源碼解讀

    MyBatis的通俗理解:SqlSession.getMapper()源碼解讀

    這篇文章主要介紹了MyBatis的通俗理解:SqlSession.getMapper()源碼解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 一文帶你入門JDK8新特性——Lambda表達(dá)式

    一文帶你入門JDK8新特性——Lambda表達(dá)式

    這篇文章主要介紹了JDK8新特性——Lambda表達(dá)式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)JAVA開發(fā),感興趣的朋友可以了解下
    2020-08-08
  • Java8新特性Stream流實例詳解

    Java8新特性Stream流實例詳解

    Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列。這篇文章主要介紹了Java8新特性Stream流的相關(guān)資料,需要的朋友參考下吧
    2017-10-10
  • 關(guān)于Java中Comparable 和 Comparator的用法

    關(guān)于Java中Comparable 和 Comparator的用法

    這篇文章主要介紹了關(guān)于Java中Comparable 和 Comparator的用法,Comparable 和 Comparator 是關(guān)于排序的兩個接口,用來實現(xiàn) Java 集合中的的排序功能,需要的朋友可以參考下
    2023-04-04
  • 通過Java實現(xiàn)中文分詞與文本關(guān)鍵詞提取

    通過Java實現(xiàn)中文分詞與文本關(guān)鍵詞提取

    這篇文章主要為大家詳細(xì)介紹了如何利用Java實現(xiàn)中文分詞以及文本關(guān)鍵詞提取功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)
    2023-06-06

最新評論