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

    一.基础 Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高.Spring 3.0更加完善,实现了对Struts 2的超越.现在 ...

  2. hdu1420(C++)

    数论中模的运算: a*b%n=(a%n)*(b%n)%c; (a+b)%n=(a%n+b%n)%n; 幂的模:A^n%c=r    于是A^(n+1)%c=A*r%c; #include<ios ...

  3. VS2010 MFC中 使用CListCtrl的排序功能

    list 控件是creat的,不是拖在对话框上的.想使用CListCtrl的排序功能却犯了愁~~~ 还好找到方法,如下: .h文件里:afx_msg void OnLvnColumnclickList ...

  4. POJ 2128:Highways

    Highways Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2730   Accepted: 1008   Specia ...

  5. HDU - 1686 Oulipo KMP匹配运用

    id=25191" target="_blank" style="color:blue; text-decoration:none">HDU - ...

  6. Windows下ELK-5.4.3环境搭建

    Windows下ELK-5.4.3环境搭建 一.概述 ELK官网 https://www.elastic.co ELK由Elasticsearch.Logstash和Kibana三部分组件组成: El ...

  7. .NET创建宿主设计器--DesignHost、DesignSurface.

    一个窗口在运行时,是这样的: 但是,在设计时,却远比这复杂的多,它需要一个设计器对象:它仅存在于设计时,并连接到运行时存在的对象.   宿主容器 我们可以看到每个窗体和按钮均有与之相关的设计器.这两个 ...

  8. Android 开发程序员必备网站

    开发必备网站: Android 开发各种工具下载 Android 开发国内大牛集合 Android 开发技术博客周刊 Android 开发技术周报中文版 Android 优秀开源项目集合以及源码分析 ...

  9. 跳转前暂停几秒js如何实现

    jquery如何实现跳转前暂停几秒 今天有个需求,类似答题的,需要显示结果后再跳转. 此处直接通过settimeout实现. 代码如下: url = 'www.baidu.com'; setTimeo ...

  10. 【Python】列表~深入篇

    列表是一列按特定顺序排列的元素组成. 在Python中,用方括号[]来表示列表 下面是一个语言列表 Language = ['Chinese','English','Franch','Deutsch' ...