利用Spring Social轻松搞定微信授权登录的方法示例

  • 更新时间:2022-07-02 09:54:18
  • 编辑:浦琬玲
本站精选了一篇Spring相关的编程文章,网友阎英武根据主题投稿了本篇教程内容,涉及到Spring、Social、微信授权登录、Spring、微信授权登录相关内容,已被730网友关注,下面的电子资料对本篇知识点有更加详尽的解释。
Spring微服务实战
Spring微服务实战
  • 大小:215.7 MB
  • 发布人:宫明达
  • 下载:Spring微服务

微信第三方登录有两种方式:扫码登录(微信开放平台)和公众号登录(微信公众平台)

扫码登录可以用于PC等跨平台应用,而公众平台必须在微信app内使用,且必须关注公众号.

下面以公众平台为例,介绍如何基于Spring Social实现微信用户授权并获取到用户信息.(微信开放平台类似)

第一步:到微信公众平台后台注册应用并进行相关设置

微信公众平台后台地址: https://mp.weixin.qq.com/

也可以先注册一个测试号: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

用微信扫码登录后台后可以看到如下页面:

利用Spring Social轻松搞定微信授权登录的方法示例

其中的"appID"和"appsecret"需要记录下来,一会要用到.

滑到下方找到" 网页授权获取用户基本信息 ",点击" 修改 ",将自己测试服务器的域名或IP填上去:

利用Spring Social轻松搞定微信授权登录的方法示例

修改页面:

利用Spring Social轻松搞定微信授权登录的方法示例

第二步:添加相关代码

我们假设服务端是基于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用来处理微信授权成功后的相关操作,例如:

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判断是否为微信公众平台授权
    if ("wechatmp".equalsIgnoreCase(key.getProviderId())) {
      // 通过微信openId获取到用户详细信息
      User user = ((Wechat)connection.getApi()).userOperations().getUserProfile(openId);
      // 微信用户详细信息,可以记录到数据库.这里直接打印到后台
      System.out.println(user);
      return “/success.htm”; // 返回登录成功后跳转的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是基于内存存储用户信息的实现(UsersConnectionRepository),也是默认的实现.此外SpringSocial还提供了JDBC的实现可选.

第三步:启动并测试

在测试页面里添加一个微信授权入口:

......
<form action="/signin/wechatmp" method="POST">
  <button type="submit">微信授权登录</button>
</form>
......

启动springboot,在微信app中打开测试页面点击测试button.

测试页面的域名必须与公众平台后台" 网页授权获取用户基本信息 "中设置的域名相同.

如果一切顺利,服务端后台就会打印该微信用户的详细信息:

利用Spring Social轻松搞定微信授权登录的方法示例

页面会跳转到"/success.htm",也就是在WechatSignInAdapter.signIn中返回的地址.

注意,测试账号需要先关注微信测试公众号(测试号后台扫二维码可以关注),否则会报错"ErrorCode:10006".

微信登录实现已全部完成.

关于 微信开放平台登录 (扫码登录)与此类似,需要在 微信开放平台 后台申请"appID"和"appsecret",并将上面例子中的" wechatmp "改为" wechat "即可.

完整的例子代码:

spring-social-wechat-sample

关于Spring Social项目

spring-social

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持java学习网。

相关下载

  • Spring MVC学习指南

    大小:83.3 MB
  • Spring Cloud与Docker高并发微服务架构设计实施

    大小:143.2 MB
  • 《Spring微服务实战》代码资源

    大小:1.63 MB
  • 疯狂Spring Cloud微服务架构实战

    大小:176.9 MB
  • Spring Data JPA从入门到精通

    大小:84.93 MB

相关教程

  • SpringBoot整合screw实现数据库文档自动生成的示例代码

    SpringBoot整合screw实现数据库文档自动生成的示例代码

    给网友们整理关于SpringBoot的教程,这篇文章主要介绍了SpringBoot整合screw实现数据库文档自动生成的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    发布时间:2022-06-28SpringBoot生成数据库文档

  • 解决spring定时任务执行两次及tomcat部署缓慢问题的方法

    为网友们分享了关于spring的教程,这篇文章主要给大家介绍了关于spring定时任务执行两次及tomcat部署缓慢问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面

    发布时间:2022-06-16spring定时任务执行两次及tomcat部署缓慢问题的解决方法

  • SpringBoot中自定义注解实现参数非空校验的示例

    给网友朋友们带来一篇关于SpringBoot的教程,这篇文章主要介绍了SpringBoot中自定义注解实现参数非空校验,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下

    发布时间:2022-06-10SpringBoot 参数非空校验

  • 手把手教你SpringBoot快速集成Swagger的配置过程

    手把手教你SpringBoot快速集成Swagger的配置过程

    给网友朋友们带来一篇关于SpringBoot的教程,这篇文章主要介绍了手把手教你SpringBoot快速集成Swagger的配置过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    发布时间:2022-06-24SpringBoot集成Swagger

  • spring boot的maven配置依赖详解

    spring boot的maven配置依赖详解

    给大家整理了关于spring boot的教程,本篇文章主要介绍了spring boot的maven配置依赖详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    发布时间:2022-06-25

  • spring cloud eureka微服务之间的调用详解

    spring cloud eureka微服务之间的调用详解

    为网友们分享了关于spring cloud的教程,这篇文章主要介绍了spring cloud eureka微服务之间的调用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    发布时间:2022-06-16

  • spring5 webclient使用指南详解

    为网友们分享了关于spring的教程,本篇文章主要介绍了spring 5 webclient使用指南详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    发布时间:2022-06-12

  • Spring Security OAuth 个性化token的使用

    Spring Security OAuth 个性化token的使用

    为网友们分享了关于Spring的教程,这篇文章主要介绍了Spring Security OAuth 个性化token的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    发布时间:2022-06-11

用户留言