利用Spring Social轻松搞定微信授权登录
微信第三方登录有两种方式:扫码登录(微信开放平台)和公众号登录(微信公众平台)
扫码登录可以用于PC等跨平台应用,而公众平台必须在微信app内使用,且必须关注公众号.
下面以公众平台为例,介绍如何基于Spring Social实现微信用户授权并获取到用户信息(微信开放平台类似).
第一步:到微信公众平台后台注册应用并进行相关设置
微信公众平台后台地址: https://mp.weixin.qq.com/
也可以先注册一个测试号: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
用微信扫码登录后台后可以看到如下页面:
其中的"appID"和"appsecret"需要记录下来,一会要用到.
滑到下方找到"网页授权获取用户基本信息",点击"修改",将自己测试服务器的域名或IP填上去:
修改页面:
第二步:添加相关代码
我们假设服务端是基于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.
测试页面的域名必须与公众平台后台"网页授权获取用户基本信息"中设置的域名相同.
如果一切顺利,服务端后台就会打印该微信用户的详细信息:
页面会跳转到"/success.htm",也就是在WechatSignInAdapter.signIn中返回的地址.
注意,测试账号需要先关注微信测试公众号(测试号后台扫二维码可以关注),否则会报错"ErrorCode:10006".
微信登录实现已全部完成.
关于微信开放平台登录(扫码登录)与此类似,需要在微信开放平台后台申请"appID"和"appsecret",并将上面例子中的"wechatmp"改为"wechat"即可.
完整的例子代码:
关于Spring Social项目
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Vue常用指令详解分析
Vue入门 Vue是一个MVVM(Model / View / ViewModel)的前端框架,相对于Angular来说简单、易学上手快,近两年也也别流行,发展速度较快,已经超越Angular了。比较适用于移动端,轻量级的框架,文件小,运行速度快。最近,闲来无事,所以学习一下Vue这个流行的框架,以备后用。 一、指令 v-model 多用于表单元素实现双向数据绑定(同angular中的ng-model) v-for 格式: v-for="字段名 in(of) 数组json" 循环数组或json(同angular中的ng-repeat),需要注意从vue2开始取消了$index v-show 显示内容 (同angular中的ng-show) v-hide 隐藏内容(同angular中的ng-hide) v-if 显示与隐藏 (dom元素的删除添加 同angular中的ng-if 默认值为false) v-else-if 必须和v-if连用 v-else 必须和v-if连用 不能单独使用 否则报错 模板编译错误 v-bind 动态绑定 作用: 及时对页面的数据进行更改 v-on:click...
- 下一篇
【Flutter教程】从零构建电商应用(一)
在这个系列中,我们将学习如何使用google的移动开发框架flutter创建一个电商应用。本文是flutter框架系列教程的第一部分,将学习如何安装Flutter开发环境并创建第一个Flutter应用,并学习Flutter应用开发中的核心概念,例如widget、状态等。 本系列教程包含如下四个部分,敬请期待: 如何从零构建flutter应用 如何在flutter中布局元素 如何在flutter中组织数据 如何在flutter中展示数据 1. 开发环境安装与Flutter项目创建 Flutter的开发文档相当出色,请参考官方文档先安装开发环境。 一旦开发环境安装好,我们可以创建一个新的测试项目。我倾向于使用android studio,因为它为flutter应用的开发提供了一个完备的集成开发环境。你需要在Android studio中安装一个Dard语言插件。 现在启动Android Studio,你会看到初始化Flutter项目的选项: 从配置列表中选择**Flutter Application **。 可以为你的第一个Flutter应用起一个酷炫的名字,不过如果你和我一样不善于起名,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程