新浪微博OAuth2.0使用Java示例

jspet 5年前

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");   }