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

利用Spring Social輕松搞定微信授權(quán)登錄的方法示例

 更新時(shí)間:2018年12月14日 09:34:39   作者:LarrySu  
這篇文章主要介紹了利用Spring Social輕松搞定微信授權(quán)登錄的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

微信第三方登錄有兩種方式:掃碼登錄(微信開放平臺(tái))和公眾號(hào)登錄(微信公眾平臺(tái))

掃碼登錄可以用于PC等跨平臺(tái)應(yīng)用,而公眾平臺(tái)必須在微信app內(nèi)使用,且必須關(guān)注公眾號(hào).

下面以公眾平臺(tái)為例,介紹如何基于Spring Social實(shí)現(xiàn)微信用戶授權(quán)并獲取到用戶信息.(微信開放平臺(tái)類似)

第一步:到微信公眾平臺(tái)后臺(tái)注冊(cè)應(yīng)用并進(jìn)行相關(guān)設(shè)置

微信公眾平臺(tái)后臺(tái)地址: https://mp.weixin.qq.com/

也可以先注冊(cè)一個(gè)測(cè)試號(hào): https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

用微信掃碼登錄后臺(tái)后可以看到如下頁(yè)面:

其中的"appID"和"appsecret"需要記錄下來(lái),一會(huì)要用到.

滑到下方找到" 網(wǎng)頁(yè)授權(quán)獲取用戶基本信息 ",點(diǎn)擊" 修改 ",將自己測(cè)試服務(wù)器的域名或IP填上去:

修改頁(yè)面:

第二步:添加相關(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.增加配置項(xiàng)目

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 "可以從微信公眾平臺(tái)后臺(tái)得到.

3.修改Application.java

增加注解@EnableSocial,并引用自動(dòng)配置類(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并注冊(cè)ProviderSignInController

SignInAdapter用來(lái)處理微信授權(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();
    // 通過(guò)providerId判斷是否為微信公眾平臺(tái)授權(quán)
    if ("wechatmp".equalsIgnoreCase(key.getProviderId())) {
      // 通過(guò)微信openId獲取到用戶詳細(xì)信息
      User user = ((Wechat)connection.getApi()).userOperations().getUserProfile(openId);
      // 微信用戶詳細(xì)信息,可以記錄到數(shù)據(jù)庫(kù).這里直接打印到后臺(tái)
      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)存存儲(chǔ)用戶信息的實(shí)現(xiàn)(UsersConnectionRepository),也是默認(rèn)的實(shí)現(xiàn).此外SpringSocial還提供了JDBC的實(shí)現(xiàn)可選.

第三步:啟動(dòng)并測(cè)試

在測(cè)試頁(yè)面里添加一個(gè)微信授權(quán)入口:

......
<form action="/signin/wechatmp" method="POST">
  <button type="submit">微信授權(quán)登錄</button>
</form>
......

啟動(dòng)springboot,在微信app中打開測(cè)試頁(yè)面點(diǎn)擊測(cè)試button.

測(cè)試頁(yè)面的域名必須與公眾平臺(tái)后臺(tái)" 網(wǎng)頁(yè)授權(quán)獲取用戶基本信息 "中設(shè)置的域名相同.

如果一切順利,服務(wù)端后臺(tái)就會(huì)打印該微信用戶的詳細(xì)信息:

頁(yè)面會(huì)跳轉(zhuǎn)到"/success.htm",也就是在WechatSignInAdapter.signIn中返回的地址.

注意,測(cè)試賬號(hào)需要先關(guān)注微信測(cè)試公眾號(hào)(測(cè)試號(hào)后臺(tái)掃二維碼可以關(guān)注),否則會(huì)報(bào)錯(cuò)"ErrorCode:10006".

微信登錄實(shí)現(xiàn)已全部完成.

關(guān)于 微信開放平臺(tái)登錄 (掃碼登錄)與此類似,需要在 微信開放平臺(tái) 后臺(tái)申請(qǐng)"appID"和"appsecret",并將上面例子中的" wechatmp "改為" wechat "即可.

完整的例子代碼:

spring-social-wechat-sample

關(guān)于Spring Social項(xiàng)目

spring-social

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java提供的4種函數(shù)式接口

    java提供的4種函數(shù)式接口

    這篇文章主要介紹了java提供的4種函數(shù)式接口,函數(shù)接口是只有一個(gè)抽象方法的接口,用作?Lambda?表達(dá)式的類型并有且只有一個(gè)抽象方法的接口,下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • spring boot結(jié)合Redis實(shí)現(xiàn)工具類的方法示例

    spring boot結(jié)合Redis實(shí)現(xiàn)工具類的方法示例

    這篇文章主要介紹了spring boot結(jié)合Redis實(shí)現(xiàn)工具類的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • java開啟遠(yuǎn)程debug竟有兩種參數(shù)(最新推薦)

    java開啟遠(yuǎn)程debug竟有兩種參數(shù)(最新推薦)

    這篇文章主要介紹了java開啟遠(yuǎn)程debug竟有兩種參數(shù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Java多線程中synchronized的工作原理

    Java多線程中synchronized的工作原理

    這篇文章主要介紹了Java多線程中synchronized的工作原理,本期講解 synchronized 工作的原理以及常見的鎖優(yōu)化機(jī)制,相信大家在看完這篇博文后對(duì) synchronized 工作流程有一定的理解,需要的朋友可以參考下
    2023-07-07
  • Java實(shí)現(xiàn)Ip地址獲取的示例代碼

    Java實(shí)現(xiàn)Ip地址獲取的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)Ip地址獲取的兩種方式,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2023-09-09
  • 基于Protobuf動(dòng)態(tài)解析在Java中的應(yīng)用 包含例子程序

    基于Protobuf動(dòng)態(tài)解析在Java中的應(yīng)用 包含例子程序

    下面小編就為大家?guī)?lái)一篇基于Protobuf動(dòng)態(tài)解析在Java中的應(yīng)用 包含例子程序。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • Java反轉(zhuǎn)字符串和相關(guān)字符編碼的問(wèn)題解決

    Java反轉(zhuǎn)字符串和相關(guān)字符編碼的問(wèn)題解決

    反轉(zhuǎn)字符串一直被當(dāng)作是簡(jiǎn)單問(wèn)題,大家的思想主要就是利用遍歷,首尾交換字符實(shí)現(xiàn)字符串的反轉(zhuǎn)。例如下面的代碼,就可以簡(jiǎn)單實(shí)現(xiàn)反轉(zhuǎn)。
    2013-05-05
  • 詳解servlet配置load-on-startup的作用

    詳解servlet配置load-on-startup的作用

    本文對(duì)load-on-startup的相關(guān)內(nèi)容作了詳細(xì)介紹,然后通過(guò)具體實(shí)例向大家展示了其作用,希望可以給大家一個(gè)參考。
    2017-09-09
  • Java服務(wù)如何調(diào)用系統(tǒng)指令、Bat腳本記錄

    Java服務(wù)如何調(diào)用系統(tǒng)指令、Bat腳本記錄

    這篇文章主要介紹了Java服務(wù)如何調(diào)用系統(tǒng)指令、Bat腳本記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • springmvc集成shiro登錄失敗處理操作

    springmvc集成shiro登錄失敗處理操作

    這篇文章主要介紹了springmvc集成shiro登錄失敗處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論