1

我正在尝试将使用 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 尝试获取保存在 LoginServlet 中的 twitter 和 requestToken(使用方法 getSession().getAttribute())。这就是问题所在:twitter 对象始终为空!

我已经完全按照代码示例中的示例进行操作,所以我期待它会起作用。

任何帮助,将不胜感激

提前致谢。

4

0 回答 0