现在很多网站都整合了便捷的第三方登录,如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中了。

php 整合 微博登录的更多相关文章

  1. django 注册、登录及第三方接口程序(4):扩展邮箱注册,登录,微博登录

    1.邮箱注册 这里需要扩展User,两种解决办法,1,注册时将email字段内容赋给username,这种瞒天过海型的,另一种就是扩展user,这里介绍django1.5的扩展方法. 1.settin ...

  2. 如何从零开始对接第三方登录(Java版):QQ登录和微博登录

    前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了QQ和微博这2大常用软件的一键登录,总的来说其实都挺简单的,可能会有一点小坑,但不算多,完整记录下来方便后来人快速对接. 后台设 ...

  3. PHP调用微博接口实现微博登录的方法示例

    在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站.这里以微博登录为例.微博登录包括身份认证.用户关系以及内容传播.允许用户使用微博帐号登录访问第三方网站,分享内容 ...

  4. PHP/ThinkPHP5 框架集成微博登录入库流程示意

    PHP/ThinkPHP5 框架集成微博登录入库流程示意 第三方登陆这个东东,目前主要是 微信.微博.qq.淘宝.支付宝 等几个.他们都是基于oath2协议的.原理差不多.这里记录的是我测试的新郎微博 ...

  5. DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配

    DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配 主题自带了微博登陆接口,很简单的去新浪微博开放平台创建了网页应用,然后把APP ID和 AppSecret填好后,以为大功告成 ...

  6. dedecms织梦第三方登录插件-QQ登录、微博登录、微信登录

    织梦程序集成第三方QQ登录.微博登录.微信登录,获取QQ.微博.微信,并存储至数据库,一键注册为网站会员,不用再次填写绑定信息,方便粘贴用户更强. 织梦第三方登录效果 第三方登录插件特点 1.所有文件 ...

  7. php第三方登录(微博登录,仿照慕课网)

    https://www.cnblogs.com/haoyu521/p/5606931.html 1:开发之前,请大家先自行熟悉一下OAuth协议原理. 2:我们开发需要具备一个外网可访问的线上域名,如 ...

  8. spring security整合QQ登录

    最近在了解第三方登录的内容,尝试对接了一下QQ登录,此次记录一下如何实现QQ登录的过程,在这个例子中是和spring secuirty整合的,不整合spring secuirty也是一样的. 需求: ...

  9. struts2+hibernate整合-实现登录功能

    最近一直学习struts2+hibernate框架,于是想把两个框架整合到一起,做一个小的登录项目.其他不多说,直接看例子. 1).Struts2 和hibernate的环境配置 包括jar包.web ...

随机推荐

  1. Spring中使用集成MongoDB Client启动时报错:rc: 48

    一定是所在的服务器也装了MongoDB导致端口冲突,解决方法:kill掉全部MongoDB的进程. ps aux | grep mongod PID 参考: http://blog.csdn.net/ ...

  2. Linux(三) 一些命令

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  3. mfoc安装编译

    系统环境 UBUNTU16.04,要安装好各种基础的编译环境,这就不说了,如果不知道需要什么,那就编译时出错时看到什么安装什么吧 下载源码包libnfc, mfoc, mfcuk,都是github上, ...

  4. 比JSONKit还要快的第三方JSON解析器NextiveJson

    这款比JSONKit还好用,效率跟iOS5原生的差不多,不过解析后对内存的释放比原生的要多.所以推荐 https://github.com/nextive/NextiveJson 顺便提一下解析XML ...

  5. voliatilekeyword

    啃书的时候,发现了这个keyword. 曾经都没有听过.唉,我真是孤陋寡闻啊... C/C++ 中的 volatile keyword和 const 相应,用来修饰变量,通经常使用于建立语言级别的 m ...

  6. js 保留两位小数 javascript

    alert((0.9996*100).toFixed(2)); 得到99.96,这是我想要的! 使用Number.toFixed()可以格式数字显示任意的小数位!

  7. HttpWebRequest.Proxy属性

    HttpWebRequest.Proxy默认使用IE代理,可以设置“Internet选项-Internet属性-连接-局域网设置-代理服务器”.

  8. Java使用笔记之对象比较

    1.关于java对象的比较,经常会遇见比较某个两个对象的多个属性是否相等,可以通过重写对象equals方法来实现. 比如有两个User,如果姓名和年龄相等的话,我们就可以认为他们重复的数据.那么我们就 ...

  9. SQL Server -使用表触发器记录表插入,更新,删除行数

    1.如何使用sql获取当前session用户名和机器名 Select CURRENT_USER,Host_name() 2.如何在表触发器中获取当前表名称 SELECT OBJECT_SCHEMA_N ...

  10. RF--- selenium