第三方登录之接入微博
第三方登录admin 发布于:2019-01-09 14:02:28
阅读:loading
基本上所有的使用第三方账号登录都主要分为两个部分:
第一:在其开发者中心(或开放平台)创建工程,并配置工程相关信息;
第二:选择登录接入的方式(下载开发相关资源),并将登录代码集成至具体的开发应用中;
个人较少使用微博,感觉新浪微博是微博的代名词(这点从它的代码定义上感觉到的,直接命名为weibo4j),曾经有注册过sina邮箱,故而也就尝试这将它的登录给接入进来,同样的,我们先在微博的开放平台(https://open.weibo.com/apps)创建应用(前提都是需要开发者认证),得到具体应用的 App Key 与 App Secret 信息,并且配置好应用的授权回调页面地址,具体参考如下图所示:
同样的,这里使用Java-SDK接入,下载对应版本的开发相关资源(只使用众多接口中的登录接口)http://open.weibo.com/wiki/Connect/login ,参考如下代码实现:
#接入新浪登录
weibo.connect.client_ID=3060XXXXXXX
weibo.connect.client_SERCRET=bbea3b2afd3c0bb3d61cXXXXXXXXX
weibo.connect.redirect_URI=http://www.chendd.cn/XXXXXXXXXXXXXX
weibo.connect.baseURL=https://api.weibo.com/2/
weibo.connect.accessTokenURL=https://api.weibo.com/oauth2/access_token
weibo.connect.authorizeURL=https://api.weibo.com/oauth2/authorize
weibo.connect.rmURL=https://rm.api.weibo.com/2/
页面HTML代码参考:
<!— 超链接去登录 -->
<a href="/sinaWeibo-login/sinaWeiboConnect.a" title="使用新浪微博登录">
<img align="absmiddle" src="/app/images/third/sina/weibo.png"/>
</a>
@Controller
@Scope("prototype")
@RequestMapping("/sinaWeibo-login")
public class SinaWeiboLoginController extends ThirdLoginConnectController {
@RequestMapping("/sinaWeiboConnect")
public void sinaWeiboConnect() throws Exception {
Oauth oauth = new Oauth();
String authorize = oauth.authorize("code", "");
response.sendRedirect(authorize);
}
@RequestMapping("/sinaWeiboCallback")
public void sinaWeiboCallback() throws Exception {
String code = request.getParameter("code");
Oauth oauth = new Oauth();
AccessToken accessToken = oauth.getAccessTokenByCode(code);
if(accessToken == null || StringUtils.isEmpty(accessToken.getAccessToken())) {
throw new Exception("新浪微博授权失败,授权Token信息为空!");
}
String uid = accessToken.getUid();
if(StringUtils.isEmpty(uid)) {
throw new Exception("新浪微博授权失败,用户信息为空!");
}
Users users = new Users();
users.setToken(accessToken.getAccessToken());//设置Token
User user = users.showUserById(uid);
String name = user.getName();
String avatarLarge = user.getAvatarLarge();//头像,默认180像素
System.out.println(String.format("用户头像地址:%s,id:%s,uname:%s" , avatarLarge , uid , name));
//此处省略重定向
}
}
(1)由于AppKey、App Secret是API接口自行调用的,理论上讲无需我们关注这些参考文件是如何加载和调用的,但本系统同事需要接入多个第三方登录,所以在接入之前就计划将所有接入的参数放置在同一个文件中,而它们都是基于Oauth2.0协议,所以很大程度上的参数key都会重复,所以这就需要我们更改API文档中的代码来实现将多个相同参数给放置在同一个文件中(这么干其实就为了减少维护成本而已),参考如下代码实现(重写weibo4j.util.WeiboConfig类,在其读取参数时加上约定好的前缀即可):
public class WeiboConfig {
public WeiboConfig() {
}
private static Properties props = PropertiesUtils.getInstance().getProperties(EnumProperties.THIRD_LOGIN_CONNECT);
public static String getValue(String key) {
return props.getProperty("weibo.connect." + key);
}
public static void updateProperties(String key, String value) {
props.setProperty("weibo.connect." + key, value);
}
}
(2)、maven坐标参考为:
<!-- sina weibo -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>weibo4j-oauth2</artifactId>
<version>2.1.1-beta2-3</version>
</dependency>
点赞