Twitter用oAuth登录

时间:2013-06-06 23:18:46

标签: twitter oauth access-token twitter4j sign

我正在尝试将使用Twitter登录的功能添加到我的网站,但我无法使其正常运行。我正在使用twitter4j api。在twitter4j网站上,他们有一个示例代码,精确地演示了工作流程中的签名。我尝试使用这段代码,但它不能在一个特定的步骤中起作用(至少对我而言)!

我有一个LoginServlet,它可以重定向到Twitter验证页面,用户可以在该页面上授予对我的应用程序的访问权限。这是doGet代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    TwitterFactory twitterFac = new TwitterFactory();
    Twitter twitter = twitterFac.getInstance();
    twitter.setOAuthConsumer("<consumer_key>", "<consumer_secret>");

    request.getSession().setAttribute("twitter", twitter);
    try {
        RequestToken requestToken = twitter.getOAuthRequestToken("http://127.0.0.1:8080/AllMusicWeb/CallbackServlet");
        request.getSession().setAttribute("requestToken", requestToken);
        response.sendRedirect(requestToken.getAuthenticationURL());
    } catch (TwitterException e) {
        throw new ServletException(e);
    }
}

正如您所看到的,twitter对象和请求令牌都保存在http数据包中(至少我认为这些是getSession.setAttribute方法所做的那样)。

然后,twitter页面重定向到我的应用程序页面(CallbackServlet)。所有这些都是正确执行的。

然后CallbackServlet具有以下doGet方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Twitter twitter = (Twitter) request.getSession().getAttribute("twitter");
    RequestToken requestToken = (RequestToken) request.getSession().getAttribute("requestToken");
    String verifier = request.getParameter("oauth_verifier");
    try {
        twitter.getOAuthAccessToken(requestToken, verifier);
        request.getSession().removeAttribute("requestToken");
    } catch (TwitterException e) {
        throw new ServletException(e);
    }
    response.sendRedirect("<other_page>");
}

CallbackServlet尝试将login和requestToken保存在LoginServlet中(使用方法getSession()。getAttribute())。这就是问题所在:twitter对象总是为空!

我已经按照代码示例中的方式跟踪了示例,因此我希望它能够正常运行。

任何帮助将不胜感激

提前致谢。

0 个答案:

没有答案