SpringMVC 整合新浪微博登陸 Java SDK

如今不少網站都整合了便捷的第三方登陸,如QQ登陸、新浪微博、搜狐、網易等,爲用戶提供很多方便和節約時間。咱們能夠選擇使用JS或SDK實現第三方提供用戶受權API,本文主要講解 JAVA SDK 新浪微博登陸受權以及獲取用戶資料。 html

注:本例子使用的是 SpringMVC,因此若想拷貝代碼直接使用則需本身提早搭建好環境。 java

一、首先申請新浪微博網站接入:http://open.weibo.com/wiki/ session

二、成爲開發者獲得App Key和App Secret app

三、下載weibo4j-oauth2:http://code.google.com/p/weibo4j/downloads/list 網站

四、編寫獲取用戶信息代碼,搞定! ui

下載解壓後,將src目錄下weibo4j文件夾以及config.properties拷貝至本身 JAVA WEB 項目的src目錄下。 google

編輯config.properties配置文件,改爲成本身的資料。第一個填寫你申請的App Key值,第二個填寫App Secret值。 url

1
2
3
client_ID =     
client_SERCRET =
redirect_URI =

第三個redirect_URI,是你的重定向後的網址。應該對應一個控制器(Spring Controller)或 Servlet。在這裏咱們須要兩個網址,第一個網址即用戶在頁面上點擊的網址,能跳轉到新浪微博帳號登陸界面,當用戶點擊帳號登錄界面的登陸按鈕時,新浪微博會去校驗資料正確性,一旦資料正確將會以 get 方式請求而且攜帶參數code重定向到你填寫的redirect_URI,此時就能獲取用戶的資料了。 spa

以小明博客爲例,首先用戶點擊 http://www.bugxm.com/user/login-sian-weibo.html,咱們接收請求後主要工做是重定向到新浪微博登陸頁面。代碼片斷以下: .net

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中了。

相關文章
相關標籤/搜索