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

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

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

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

1. 注冊(cè)和配置

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

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

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

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

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

3.1 配置項(xiàng)目

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

5. 處理異常和安全性

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

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

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

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

相關(guān)文章

  • springboot ehcache 配置使用方法代碼詳解

    springboot ehcache 配置使用方法代碼詳解

    EhCache是一個(gè)比較成熟的Java緩存框架,Springboot對(duì)ehcache的使用非常支持,所以在Springboot中只需做些配置就可使用,且使用方式也簡易,今天給大家分享springboot ehcache 配置使用教程,一起看看吧
    2021-06-06
  • 劍指Offer之Java算法習(xí)題精講鏈表與二叉樹專項(xiàng)訓(xùn)練

    劍指Offer之Java算法習(xí)題精講鏈表與二叉樹專項(xiàng)訓(xùn)練

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • spring @Scheduled定時(shí)任務(wù)注解使用方法及注意事項(xiàng)小結(jié)

    spring @Scheduled定時(shí)任務(wù)注解使用方法及注意事項(xiàng)小結(jié)

    Spring的@Scheduled注解用于定時(shí)任務(wù)調(diào)度,默認(rèn)單線程依次執(zhí)行,可以通過配置多線程調(diào)度器或使用@Async注解實(shí)現(xiàn)并行執(zhí)行,常見參數(shù)包括cron、fixedRate、fixedDelay、initialDelay等,本文介紹spring @Scheduled定時(shí)任務(wù)注解使用方法,感興趣的朋友一起看看吧
    2025-02-02
  • logstash將mysql數(shù)據(jù)同步到elasticsearch方法詳解

    logstash將mysql數(shù)據(jù)同步到elasticsearch方法詳解

    這篇文章主要為大家介紹了logstash將mysql數(shù)據(jù)同步到elasticsearch方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • java環(huán)境變量path和classpath的配置

    java環(huán)境變量path和classpath的配置

    這篇文章主要為大家詳細(xì)介紹了java系統(tǒng)環(huán)境變量path和classpath的配置過程,感興趣的小伙伴們可以參考一下
    2016-07-07
  • java異常中throw和throws的區(qū)別及說明

    java異常中throw和throws的區(qū)別及說明

    這篇文章主要介紹了java異常中throw和throws的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Spring加載屬性文件方式(自動(dòng)加載優(yōu)先級(jí)問題)

    Spring加載屬性文件方式(自動(dòng)加載優(yōu)先級(jí)問題)

    這篇文章主要介紹了Spring加載屬性文件方式(自動(dòng)加載優(yōu)先級(jí)問題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 基于openeuler的DataGear部署文檔

    基于openeuler的DataGear部署文檔

    本文詳細(xì)介紹了如何在openEuler操作系統(tǒng)上安裝和配置JDK以及DataGear,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-03-03
  • 如何在Java中使用標(biāo)準(zhǔn)庫創(chuàng)建臨時(shí)文件

    如何在Java中使用標(biāo)準(zhǔn)庫創(chuàng)建臨時(shí)文件

    有時(shí)候我們程序運(yùn)行時(shí)需要產(chǎn)生中間文件,但是這些文件只是臨時(shí)用途,并不做長久保存,我們可以使用臨時(shí)文件,不需要長久保存,這篇文章主要給大家介紹了關(guān)于如何在Java中使用標(biāo)準(zhǔn)庫創(chuàng)建臨時(shí)文件的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • 深入了解JAVA 軟引用

    深入了解JAVA 軟引用

    這篇文章主要介紹了JAVA 軟引用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論