SpringMVC 整合新浪微博登录 Java SDK

Easter79
• 阅读 557

现在很多网站都整合了便捷的第三方登录,如QQ登录、新浪微博、搜狐、网易等,为用户提供不少方便和节约时间。我们可以选择使用JS或SDK实现第三方提供用户授权API,本文主要讲解 JAVA SDK 新浪微博登录授权以及获取用户资料。

注:本例子使用的是 SpringMVC,所以若想拷贝代码直接使用则需自己提前搭建好环境。

1、首先申请新浪微博网站接入:http://open.weibo.com/wiki/

2、成为开发者得到App Key和App Secret

3、下载weibo4j-oauth2:http://code.google.com/p/weibo4j/downloads/list

4、编写获取用户信息代码,搞定!

下载解压后,将src目录下weibo4j文件夹以及config.properties拷贝至自己 JAVA WEB 项目的src目录下。

编辑config.properties配置文件,改成成自己的资料。第一个填写你申请的App Key值,第二个填写App Secret值。

1

2

3

client_ID =     

client_SERCRET =

redirect_URI =

第三个redirect_URI,是你的重定向后的网址。应该对应一个控制器(Spring Controller)或 Servlet。在这里我们需要两个网址,第一个网址即用户在页面上点击的网址,能跳转到新浪微博账号登录界面,当用户点击账号登陆界面的登录按钮时,新浪微博会去校验资料正确性,一旦资料正确将会以 get 方式请求并且携带参数code重定向到你填写的redirect_URI,此时就能获取用户的资料了。

以小明博客为例,首先用户点击 http://www.bugxm.com/user/login-sian-weibo.html,我们接收请求后主要工作是重定向到新浪微博登录页面。代码片段如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

    /**

     * 

     * 新浪微博登录界面

     * 

     * @param session

     *  @return

     * @throws WeiboException

     */

    @RequestMapping(value = "/user/login-sian-weibo.html", method = RequestMethod.GET)

    public String loginSinaWeibo(HttpServletRequest request, HttpSession session)

            throws WeiboException {

        session.setAttribute("login_current_url", request.getHeader("Referer"));

        weibo4j.Oauth oauth = new weibo4j.Oauth();

        String url = oauth.authorize("code", "");

        return "redirect:" + url;

    }

代码片段中的session是为了获取用户登录前所在页面URL,方便登录完后重定向到登录之前的页面。其中url是新浪微博登录界面网址,我们只需要重定向过去就行了。

当用户在新浪微博登录成功后,会重定向到我们刚才填写的redirect_URI中,如我填写的 http://www.bugxm.com/user/login-sina-weibo.do,对应逻辑代码片段如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

    /**

     * 

     * 新浪微博登录操作

     * 

     * @param session

     *  @return

     * @throws WeiboException

     */

    @RequestMapping(value = "/user/login-sina-weibo.do", method = RequestMethod.GET)

    public String loginSinaWeiboAction(HttpSession session,

            @RequestParam String code) throws WeiboException {

        String url = (String) session.getAttribute("login_current_url");

        session.removeAttribute("login_current_url");

        User user = userService.sinaWeiboLoginAction(code,

                (User) session.getAttribute("user"));

        if (null != user) {

            session.setAttribute("user", user);

        }

        return "redirect:" + url;

    }

重定向过来会携带code参数我们把值取到用来获取用户的资料。本段代码中的除code、sinaWeiboLoginAction()外都是次要,对本文主题而言可有可无。我们来看看sinaWeiboLoginAction()代码片段:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

/**

     * 新浪微博操作

     * 

     * @param code

     * @param currentLoginUser

     *            当前登录用户,可为 null

     *  @return

     * @throws WeiboException

     */

    public User sinaWeiboLoginAction(String code, User currentLoginUser)

            throws WeiboException {

        weibo4j.Oauth oauth = new weibo4j.Oauth();

        weibo4j.http.AccessToken accessToken = oauth.getAccessTokenByCode(code);

        String uid = accessToken.getUserUid();

        weibo4j.Users users = new weibo4j.Users();

        users.client.setToken(accessToken.getAccessToken());

        weibo4j.model.User user = users.showUserById(uid);

        String userDomain = user.getUserDomain(); // 用户登录名

        String username = user.getScreenName(); // 用户呢称

        String avatar = user.getAvatarLarge(); // 用户头像

        String gender = null; // 性别

        if ("m".equals(user.getGender())) {

            gender = "男";

        } else if ("f".equals(user.getGender())) {

            gender = "女";

        } else {

            gender = "未知";

        }

        // …… 业务逻辑操作,代码略

        return currentLoginUser;

    }

其中String uid = accessToken.getUserUid();的getUserUid()方法本身是没有的,我们需要修改新浪微博的源代码,不然取uid非常麻烦。

编辑/src/weibo4j.http/AccessToken.java,在:

1

2

3

public String getRefreshToken() {

    return refreshToken;

}

下面添加:

1

2

3

public String getUserUid() {

    return uid;

}

到此就搞定了。用户的其它资料已经很详细的注释在/src/weibo4j/model/User.java中了。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Python进阶者 Python进阶者
2年前
一篇文章教会你使用Python定时抓取微博评论
【Part1——理论篇】大家好,我是皮皮。试想一个问题,如果我们要抓取某个微博大V微博的评论数据,应该怎么实现呢?最简单的做法就是找到微博评论数据接口,然后通过改变参数来获取最新数据并保存。首先从微博api寻找抓取评论的接口,如下图所示。但是很不幸,该接口频率受限,抓不了几次就被禁了,还没有开始起飞,就凉凉了。接下来小编又选择微博的移动端网站,先登录,然后找
Wesley13 Wesley13
2年前
QQ分享 QQ空间分享 API链接:
通过qq空间、qq聊天、新浪微博和微信二维码分享平台提供的接口,实现把网页中对应的图片、标题、描述的信息参数用javascript获取后传进接口中,实现一键分享。使用到的接口(测试时需要登录,网址和图片必须是公网的,不能是localhost):1.分享到QQ空间接口:https://sns.qzone.qq.com/cg
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Karen110 Karen110
2年前
一篇文章教会你使用Python定时抓取微博评论
【Part1——理论篇】试想一个问题,如果我们要抓取某个微博大V微博的评论数据,应该怎么实现呢?最简单的做法就是找到微博评论数据接口,然后通过改变参数来获取最新数据并保存。首先从微博api寻找抓取评论的接口,如下图所示。但是很不幸,该接口频率受限,抓不了几次就被禁了,还没有开始起飞,就凉凉了。接下来小编又选择微博的移动端网站,先登录,然后找到我们想要抓
Stella981 Stella981
2年前
GitHub:新浪微博爬虫,用Python采集新浪微博数据
hello,小伙伴们,大家好,今天给大家分享的开源项目是:weiboSpider,看名字也可以猜到这个项目是做什么的了!没错,这个开源项目就是采集新浪微博一个或多个用户(如:胡歌、迪丽热巴、郭碧婷)数据,并将结果信息写入文件或数据库,写入信息几乎包括用户微博的所有数据,包括用户信息和微博信息两大类。这个开源项目需设置cookie来获取微博访问权限,后面会
Stella981 Stella981
2年前
Android之第三方平台实现QQ登录和QQ分享
目前大多数APP都包含了第三方平台的登录,特别是QQ和微信,这篇博客主要讲的是如何实现QQ第三方平台实现QQ登录和分享功能,功能包含:登录授权登录获取用户信息(昵称,头像,地址等)QQ分享给好友QQ分享到空间先看看效果图:                      !(https://static.oschin
Easter79 Easter79
2年前
SQL 在线 UML 设计器 — Html5 SNS 应用
SQLD基于wwwsqldesigner二次开发,目前支持QQ与新浪微博登录<居然忘记给地址了:http://sqld.sinaapp.com(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fsqld.sinaapp.com) 使用教程:一、首先看看右上角的工具条!
Stella981 Stella981
2年前
SQL 在线 UML 设计器 — Html5 SNS 应用
SQLD基于wwwsqldesigner二次开发,目前支持QQ与新浪微博登录<居然忘记给地址了:http://sqld.sinaapp.com(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fsqld.sinaapp.com) 使用教程:一、首先看看右上角的工具条!
Wesley13 Wesley13
2年前
C#开发——网站应用微信登录开发
1\.在微信开放平台注册开发者账号,并有一个审核已通过的网站应用,并获得相对应的AppID和AppSecret,申请通过登陆后,方可开始接入流程。2.微信OAuth2.0授权登录目前支持authorization\_code模式,适用于拥有server端的应用授权。该模式整体流程为:1.第三方发起微信授权登录请求,微信用户允许授权第三方应
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k