您的位置:首页 > 编程语言 > Java开发

基于Spring的QQ第三方登录实现

2016-02-29 12:34 477 查看
之前我们完成了基于Spring的Github第三方登录--通用化的第三方登陆实现以及基于Spring的新浪微博第三方登录实现,接下来我们来学习一下如何实现QQ第三方登录。


完善个人信息

在实现QQ第三方登录功能之前,需要前往QQ互联完善个人信息,并添加你的第三方应用的相关信息。

访问QQ互联,点击【管理中心】,进入应用开发者完善界面:





创建第三方应用

按要求注册应用者开发信息后,进入应用管理中心,点击【创建应用】,选择网站,按要求填写相关信息,与微博一样,QQ也需要填写网站地址以及验证是否是网站所有者,验证方法和微博一样,都是在首页添加一行代码,同时,还需要填写回调地址:





创建成功后我们就能得到相应的
appId
以及
appKey


第三方登录通用架构

同样,我们将添加基于Spring的Github第三方登录--通用化的第三方登陆实现中的通用化架构:





QQApi

首先,添加QQApi,为OAuthService提供进行OAuth验证的各个地址,相关的地址可以在QQ
OAuth2.0开发文档中得到,最终的QQApi代码如下:

public class QQApi extends DefaultApi20 {

private static final String AUTHORIZE_URL = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=%s&redirect_uri=%s&state=%s";
private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s";
private static final String ACCESS_TOKEN_URL = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&state=%s";

private final String qqState;

public QQApi(String state){
this.qqState = state;
}

@Override
public String getAuthorizationUrl(OAuthConfig config) {
if (config.hasScope()){
return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()),
qqState, OAuthEncoder.encode(config.getScope()));
}
else{
return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), qqState);
}
}

@Override
public String getAccessTokenEndpoint() {
return String.format(ACCESS_TOKEN_URL, qqState);
}

}


QQOAuthService

接下来我们来添加
QQOAuthService
,查看文档《QQ
如何获取用户open_id》,通过地址
https://graph.qq.com/oauth2.0/me
获取用户的open
id,并将其转换成
OAuthUser


public class QQOAuthService extends OAuthServiceDeractor {

private static final String PROTECTED_RESOURCE_URL = "https://graph.qq.com/oauth2.0/me";

public QQOAuthService(OAuthService oAuthService) {
super(oAuthService, OAuthTypes.QQ);
}

@Override
public OAuthUser getOAuthUser(Token accessToken) {
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
this.signRequest(accessToken, request);
Response response = request.send();
OAuthUser oAuthUser = new OAuthUser();
oAuthUser.setoAuthType(getoAuthType());
oAuthUser.setoAuthId(response.getBody());
oAuthUser.setUser(new User());
return oAuthUser;
}

}


配置QQOAuthService

最后添加
QQOAuthService
的相关配置:

@Configuration
public class OAuthConfig {

private static final String CALLBACK_URL = "http://tianmaying.com/oauth/%s/callback";

@Value("${oAuth.qq.state}") String state;
@Value("${oAuth.qq.appId}") String qqAppId;
@Value("${oAuth.qq.appKey}") String qqAppKey;

@Bean
public QQApi qqApi(){
return new QQApi(state);
}

@Bean
public OAuthServiceDeractor getQQOAuthService(){
return new QQOAuthService(new ServiceBuilder()
.provider(qqApi())
.apiKey(qqAppId)
.apiSecret(qqAppKey)
.callback(String.format(CALLBACK_URL, OAuthTypes.QQ))
.build());
}

}


修改hosts

与新浪微博一样,修改hosts一遍进行本地调试。

windows系统hosts文件一般在
C:\WINDOWS\system32\drivers\etc


mac系统hosts文件地址一般为:
/etc/hosts


在hosts文件添加以下一行:

127.0.0.1       tianmaying.com


调试

进入根目录,运行
sudo mvn spring-boot:run
命令,访问http://tianmaying.com (之前填写应用信息以及修改hosts时所填写的域名,这三个域名必须一致),由于必须通过域名进行访问,所以我们需要监听80端口,运行时需要超级管理员权限。

注意:将代码上线后,还需要经过QQ的审核,进入QQ 应用管理中心,按要求进行填写即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: