新浪微博OAuth2.0使用Java示例
1.首先熟悉OAuth認證流程;熟悉app-key,app-secret,request-token,access-token幾個概念:
a.在oauth認證中有三個參與者:user,service provider和consumer;其中service provider為新浪微博平臺,consumer為新浪應用程序開發者,user為應用程序的使用用戶。
b.user和service provider之間是信任的,consumer和service provider之間是信任的;但user與consumer之間不是信任的。OAuth認證的核心是實現user和consumer之間的信任。
c.首先consumer到新浪微博站內應用開發中申請App-key和app-secret,完成consumer和service provider之間的信任;然后consumer根據appKey和callback URl生成request token帶著user去新浪的登錄認證頁面;
用戶認證后,生成access-token返回給consumer使用;consumer根據此access-token替用戶完成某些操作或任務。
2.例子
配置信息:config.properties中:client_ID和client_SECRET填寫申請到的appkey和appsecret兩個選項。
redirect_url:填寫自己的回調地址。(本例為:http://localhost/weiboTest/callbackURL.jsp)。同時在微博站內應用:應用信息-》基本信息-》應用實際地址上填寫該回調地址.
新建web project:weiboTest
a.核心函數.
public class WeiboAuth { public void getRequestToken() { Oauth oauth = new Oauth(); BareBonesBrowserLaunch.openURL(oauth.authorize("code")); } public AccessToken getAccessToken(String code) { Oauth oauth = new Oauth(); AccessToken accessToken = null; accessToken = oauth.getAccessTokenByCode(code); return accessToken; } public void updateStatus(String accessToken, String content) { Timeline tl = new Timeline(); tl.client.setToken(accessToken); Status status = tl.UpdateStatus(content); } }
b.request.jsp //站點首頁
<html> <head> <base href="<%=basePath%>"> <title>起始頁面</title> </head> <body> <jsp:useBean id="weboauth" scope="session" class="com.geron.test.WeiboAuth"/> <% weboauth.getRequestToken(); %> <a href="index.jsp?opt=1">請點擊進行web方式的OAuth認證!!!</a> </body> </html>
c.callbackURL.jsp //回調頁面,成功后跳轉到相應的頁面
<html> <head> <base href="<%=basePath%>"> </head> <body> <jsp:useBean id="weiboAuth" scope="session" class="com.geron.test.WeiboAuth" /> <% String code=request.getParameter("code"); AccessToken accessToken=weiboAuth.getAccessToken(code); if(accessToken!=null){ session.setAttribute("accessToken",accessToken.getAccessToken().toString()); out.print("5秒鐘后跳轉..."); Thread.sleep(5000); response.sendRedirect(basePath+"/writeweibo.jsp"); }else{ response.sendRedirect(basePath+"/index.jsp"); } %> </body> </html>
d. writeweibo.jsp//發微博頁面
<html> <head> <base href="<%=basePath%>"> <title>寫微博</title> </head> <body bgcolor="#d0d0d0"> <form method="post" action="<%=basePath%>/servlet/updateWeibo"> 請在這里寫上140字符以內的文本:</br> <textarea name="weiboText" rows="6" cols="30">發微薄</textarea></br> <input type="submit" value="發布"> <input type="reset" value="清除"></br> </form> </body> </html>
e.updateweibo.java//servlet函數
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String weiboText = new String(request.getParameter("weiboText").getBytes("iso-8859-1"),"utf-8"); WeiboAuth auth = new WeiboAuth(); HttpSession session = request.getSession(); String accessToken = (String) session.getAttribute("accessToken"); System.out.println("accessToken is : "+session.getAttribute("accessToken")); auth.updateStatus(accessToken, weiboText); out.print("發布成功"); response.sendRedirect("/index.jsp"); }