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

 

posted on 2020-03-24 22:53  好好学习,天天睡觉  阅读(908)  评论(0)    收藏  举报