新浪微博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"); }