第三方登录之接入微博

第三方登录
placeholder image
admin 发布于:2019-01-09 14:02:28
阅读:loading

基本描述

基本上所有的使用第三方账号登录都主要分为两个部分:

第一:在其开发者中心(或开放平台)创建工程,并配置工程相关信息;

第二:选择登录接入的方式(下载开发相关资源),并将登录代码集成至具体的开发应用中;

个人较少使用微博,感觉新浪微博是微博的代名词(这点从它的代码定义上感觉到的,直接命名为weibo4j),曾经有注册过sina邮箱,故而也就尝试这将它的登录给接入进来,同样的,我们先在微博的开放平台(https://open.weibo.com/apps)创建应用(前提都是需要开发者认证),得到具体应用的 App Key 与 App Secret 信息,并且配置好应用的授权回调页面地址,具体参考如下图所示:

image.png

image.png

同样的,这里使用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代码

@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("用户头像地址:%sid%suname%s" , avatarLarge , uid , name));

      //此处省略重定向

   }

  

}

授权效果

image.png

image.png

小技巧

(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 keyString value) {

      props.setProperty("weibo.connect." + keyvalue);

   }

}

(2)、maven坐标参考为:

   <!-- sina weibo -->

   <dependency>

      <groupId>com.belerweb</groupId>

      <artifactId>weibo4j-oauth2</artifactId>

      <version>2.1.1-beta2-3</version>

   </dependency>


 点赞


 发表评论

当前回复:作者

 评论列表


留言区