利用Spring Social輕松搞定微信授權(quán)登錄的方法示例
微信第三方登錄有兩種方式:掃碼登錄(微信開放平臺)和公眾號登錄(微信公眾平臺)
掃碼登錄可以用于PC等跨平臺應(yīng)用,而公眾平臺必須在微信app內(nèi)使用,且必須關(guān)注公眾號.
下面以公眾平臺為例,介紹如何基于Spring Social實現(xiàn)微信用戶授權(quán)并獲取到用戶信息.(微信開放平臺類似)
第一步:到微信公眾平臺后臺注冊應(yīng)用并進行相關(guān)設(shè)置
微信公眾平臺后臺地址: https://mp.weixin.qq.com/
也可以先注冊一個測試號: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
用微信掃碼登錄后臺后可以看到如下頁面:
其中的"appID"和"appsecret"需要記錄下來,一會要用到.
滑到下方找到" 網(wǎng)頁授權(quán)獲取用戶基本信息 ",點擊" 修改 ",將自己測試服務(wù)器的域名或IP填上去:
修改頁面:
第二步:添加相關(guān)代碼
我們假設(shè)服務(wù)端是基于springboot。
1.增加spring-social-wechat依賴:
Maven:
<dependency> <groupId>com.ikasoa</groupId> <artifactId>spring-social-wechat</artifactId> <version>1.3.1</version> </dependency>
或者Gradle:
compile 'com.ikasoa:spring-social-wechat:1.3.1'
2.增加配置項目
application.yml:
spring: social: wechatmp: app-id: [appID] app-secret: [appsecret]
或者application.properties:
spring.social.wechatmp.app-id=[appID] spring.social.wechatmp.app-secret=[appsecret]
其中" appID "和" appsecret "可以從微信公眾平臺后臺得到.
3.修改Application.java
增加注解@EnableSocial,并引用自動配置類(WechatMpAutoConfiguration.class):
Application.java
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Import; import org.springframework.social.config.annotation.EnableSocial; import org.springframework.social.wechat.autoconfigurer.WechatMpAutoConfiguration; @SpringBootApplication @EnableSocial @Import(WechatMpAutoConfiguration.class) public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }
4.增加SignInAdapter并注冊ProviderSignInController
SignInAdapter用來處理微信授權(quán)成功后的相關(guān)操作,例如:
WechatSignInAdapter.java
import org.springframework.social.connect.Connection; import org.springframework.social.connect.ConnectionKey; import org.springframework.social.connect.web.SignInAdapter; import org.springframework.social.wechat.api.User; import org.springframework.social.wechat.api.Wechat; import org.springframework.stereotype.Component; import org.springframework.web.context.request.NativeWebRequest; @Component public class WechatSignInAdapter implements SignInAdapter { @Override public String signIn(String openId, Connection<?> connection, NativeWebRequest request) { ConnectionKey key = connection.getKey(); // 通過providerId判斷是否為微信公眾平臺授權(quán) if ("wechatmp".equalsIgnoreCase(key.getProviderId())) { // 通過微信openId獲取到用戶詳細(xì)信息 User user = ((Wechat)connection.getApi()).userOperations().getUserProfile(openId); // 微信用戶詳細(xì)信息,可以記錄到數(shù)據(jù)庫.這里直接打印到后臺 System.out.println(user); return “/success.htm”; // 返回登錄成功后跳轉(zhuǎn)的url } return “/error.htm”; } }
將WechatSignInAdapter注入到ProviderSignInController中:
...... @Bean public ProviderSignInController providerSignInController(ConnectionFactoryLocator connectionFactoryLocator, UsersConnectionRepository usersConnectionRepository, WechatSignInAdapter wechatSignInAdapter) { ((InMemoryUsersConnectionRepository) usersConnectionRepository).setConnectionSignUp((Connection<?> connection) -> connection.getKey().getProviderUserId()); return new ProviderSignInController(connectionFactoryLocator, usersConnectionRepository, wechatSignInAdapter); } ......
其中InMemoryUsersConnectionRepository是基于內(nèi)存存儲用戶信息的實現(xiàn)(UsersConnectionRepository),也是默認(rèn)的實現(xiàn).此外SpringSocial還提供了JDBC的實現(xiàn)可選.
第三步:啟動并測試
在測試頁面里添加一個微信授權(quán)入口:
...... <form action="/signin/wechatmp" method="POST"> <button type="submit">微信授權(quán)登錄</button> </form> ......
啟動springboot,在微信app中打開測試頁面點擊測試button.
測試頁面的域名必須與公眾平臺后臺" 網(wǎng)頁授權(quán)獲取用戶基本信息 "中設(shè)置的域名相同.
如果一切順利,服務(wù)端后臺就會打印該微信用戶的詳細(xì)信息:
頁面會跳轉(zhuǎn)到"/success.htm",也就是在WechatSignInAdapter.signIn中返回的地址.
注意,測試賬號需要先關(guān)注微信測試公眾號(測試號后臺掃二維碼可以關(guān)注),否則會報錯"ErrorCode:10006".
微信登錄實現(xiàn)已全部完成.
關(guān)于 微信開放平臺登錄 (掃碼登錄)與此類似,需要在 微信開放平臺 后臺申請"appID"和"appsecret",并將上面例子中的" wechatmp "改為" wechat "即可.
完整的例子代碼:
關(guān)于Spring Social項目
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
spring boot結(jié)合Redis實現(xiàn)工具類的方法示例
這篇文章主要介紹了spring boot結(jié)合Redis實現(xiàn)工具類的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11java開啟遠程debug竟有兩種參數(shù)(最新推薦)
這篇文章主要介紹了java開啟遠程debug竟有兩種參數(shù),本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07基于Protobuf動態(tài)解析在Java中的應(yīng)用 包含例子程序
下面小編就為大家?guī)硪黄赑rotobuf動態(tài)解析在Java中的應(yīng)用 包含例子程序。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07Java反轉(zhuǎn)字符串和相關(guān)字符編碼的問題解決
反轉(zhuǎn)字符串一直被當(dāng)作是簡單問題,大家的思想主要就是利用遍歷,首尾交換字符實現(xiàn)字符串的反轉(zhuǎn)。例如下面的代碼,就可以簡單實現(xiàn)反轉(zhuǎn)。2013-05-05Java服務(wù)如何調(diào)用系統(tǒng)指令、Bat腳本記錄
這篇文章主要介紹了Java服務(wù)如何調(diào)用系統(tǒng)指令、Bat腳本記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06