我正在尝试将使用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对象总是为空!
我已经按照代码示例中的方式跟踪了示例,因此我希望它能够正常运行。
任何帮助将不胜感激
提前致谢。