給網站添加第三方登入的功能,研究了下新浪微博登入的介面,本來想使用它提供的那種js程式碼程式庫的方式,結果始終搞不定,由於不精通js只能夠放棄。下載了個java的SDK包:weibo4j-oauth2-beta2.1.1,研究了下,雖然出了一些問題,但還是很快整合到網站裡面了。
首先,把一些必要的包和java類負責到自己的工程檔案:
修改config檔案裡面的client_ID,client_SERCRET,redirect_URI。
自己在登入頁面寫一個微博登入按鈕,超連結到名字為OAuth4Code的servlet。
import weibo4j.Oauth;
import weibo4j.model.WeiboException;
import weibo4j.util.BareBonesBrowserLaunch;
public class OAuth4Code extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
Oauth oauth = new Oauth();
try{
BareBonesBrowserLaunch.openURL(oauth.authorize("code",""));
}catch(WeiboException e){
System.out.println(e);
}
}
登入成功之後會跳轉到config檔案裡面的redirect_URI。
我重新導向的也是一個servlet,核心代碼如下:
String code = request.getParameter("code");
try{
Oauth oauth = new Oauth();
//
AccessToken token = oauth.getAccessTokenByCode(code);
String token = oauth.getAccessTokenByCode(code).toString();
System.out.println(token);
//
String accessToken = token.getAccessToken();
// String uid = token.getUid();
// System.out.println(accessToken);
// System.out.println(uid);
String str[] = token.split(","); //截取字串,獲得sccessToken和uid
String accessToken= str[0].split("=")[1];
System.out.println(accessToken);
String str1[] = str[3].split("]");
String uid = str1[0].split("=")[1];
System.out.println(uid);
session.setAttribute("accessToken", accessToken);
session.setAttribute("uid", uid);
Users um = new Users();
um.client.setToken(accessToken);
User user = um.showUserById(uid);
String screenName = user.getScreenName(); //獲得到使用者暱稱
session.setAttribute("name", screenName);
}catch(WeiboException e){
System.out.println(e);
}
本來想通過AccessToken 類來擷取uid和token,結果會出現code錯誤之類的現象,只能辛苦的自己分割了。成功擷取到uid和token之後就可以根據執行個體代碼自己改了,我是擷取了使用者暱稱。