Spring Social开发第三方登录
1、Spring Social基本原理:

备注:spirng social 把上面整个流程封装起来并实现了并且封装到了过滤器:SocialAuthenticationFilter里面,当用户访问请求时,这个过滤器会把请求拦下来走完上面流程。
2、核心类和接口:
ServiceProvider:是服务提供商的一个抽象,针对每个具体的服务商都需要提供一个ServiceProvider接口的实现,spirng social提供了一个抽象类:AbstractOAuth2ServiceProvider,它实现了一些共有的东西,我们只需要继承抽象类就可以了。
Oauth2Operations:Oauth2协议相关的操作,封装了1-5步Oauth协议的标准处理流程,spring social提供了一个默认的实现:OAuth2Template,这个类会帮助我们去完成Oauth协议执行的流程。
API:没有明确接口,不同服务提供商对于用户基本信息调用不同,需要自己去写一个接口来封装第六步的行为。spring social也提供了一个抽象类:AbstractOAuth2ApiBinding
以上3个就是spring social提供的和第三方应用交互的接口。
Connection:封装前六步完成以后获取到的用户信息,代码中用到的实现类:OAuth2Connection,
它是由ConnectionFactory工厂创建。
ConnectionFactory:负责创建Connection实例,那么一定会走前面的流程,所以在ConnectionFactory里面是一定会包含一个ServiceProvider实例,实际上用到的类是:OAuth2ConnectionFactory。
ApiAdapter:负责将第六步不同服务商获取到的用户数据,统一转换成Connection标准的数据结构。
UserConnection表:存储了业务系统的用户和服务提供商里面的用户对应关系。
UsersConnectionRepository:用来操作Connection,实际用到的实现类:JdbcUsersConnectionRepository,包含增删改查的操作。
3、QQ登录开发:
步骤1、先写第六步获取用户信息,API接口
public interface QQ {
QQUserInfo getUserInfo();
}
public class QQImpl extends AbstractOAuth2ApiBinding implements QQ { }
到QQ互联申请QQ登录成功后,会分配appId和appSecret,参考API接口。
步骤2、写ServiceProvider,需要Oauth2Operations实例。
QQServiceProvider extends AbstractOAuth2ServiceProvider<QQ>{}
步骤3、写ApiAdapter
public class QQAdapter implements ApiAdapter<QQ> {}
步骤4、写ConnectionFactory
public class QQConnectionFactory extends OAuth2ConnectionFactory<QQ> {
public QQConnectionFactory(String providerId, String appId, String appSecret) {
super(providerId, new QQServiceProvider(appId, appSecret), new QQAdapter());
}
步骤5、写SocialConfig配置类,配置JdbcUsersConnectionRepository
@Configuration
@EnableSocial
public class SocialConfig extends SocialConfigurerAdapter {}
步骤6、在获取用户信息时需要继承类SocialUserDetailsService的loadUserByUserId方法查询出系统平台的User用户信息。
步骤7、配置步骤4生成QQConnectionFactory 所需要的参数。
@Configuration
@ConditionalOnProperty(prefix = "imooc.security.social.qq", name = "app-id")
public class QQAutoConfig extends SocialAutoConfigurerAdapter {}
步骤8、在SocialConfig类里面配置SpringSocialConfigurer,将spring social过滤器加到spring security过滤器链上。
可以自定义类继承SpringSocialConfigurer,修改QQ跳转的地址。网页访问的地址和网站回调域一致,即第1和第3步地址一样。
9、自定义OAuth2Template,处理返回类型为HTML的MessageConverters
public class QQOAuth2Template extends OAuth2Template {}
10、备注:
1)userId:业务系统ID
2)providerId:应用id,系统自定义,如:qq、weixin。
3)providerUserId即OpenId:用户在服务提供商的唯一标识。
4)以上代码针对浏览器模式是适用的,但是对于前后端分离来说,如果是授权码模式,在登录成功后需要处理,添加登录成功处理器返回accessToken。如果是简化模式,则不需要走上面的流程。
参考:
https://blog.csdn.net/duanshengjie/article/details/79985196
微信登录:https://www.jianshu.com/p/53c2d9959ede
qq登录:https://www.jianshu.com/p/6220b2745b24
浙公网安备 33010602011771号