Struts 2和一个简单的Facebook API

时间:2011-02-21 03:01:04

标签: java facebook struts2

我正在尝试在java中创建一个能够发布到用户facebook状态的webapp,并且我在授权过程中遇到了一些问题。基本上,我有一个struts2动作,将用户重定向到facebook登录页面,然后用“代码”重定向回给我。然后,我使用此代码访问另一个Facebook URL(将其换成访问令牌)。

问题是,我可能只是遗漏了一些简单的东西,这个第二个facebook网址没有重定向到一个动作,而是只返回一个带有访问令牌的页面。所以,我的问题是,我如何访问该令牌以放入我的数据库,最好不向最终用户显示访问令牌?

TLDR;知道如何从struts2中的动作调用请求到外部URL并解析响应而不向用户显示它吗?谢谢!

干杯, Lukas Rezek

2 个答案:

答案 0 :(得分:3)

所以基本上你会想要3件:

  1. 拦截
  2. authRequest action
  3. authResponse action
  4. 所以流程是:

    1. 拦截器将检查当前用户是否具有身份验证令牌,如果没有 - 它将重定向到authRequest操作
    2. authRequest操作将填写您的应用详细信息 - 创建网址graph.facebook.com/oauth/authorize?client_id=xxx&redirect_uri=yyy等 请注意,redirect_uri正好是authResponse操作。因此,在用户授权您的应用程序后 - 浏览器将重定向到authResponse操作
    3. authResponse操作是您检索令牌,将其保存到DB并可能将其设置为会话的平台。完成后 - 您已完成登录,您可以重定向到您的应用程序主页操作

答案 1 :(得分:0)

要在struts操作中访问外部网站,您有两种选择。创建套接字并连接到外部站点并通过socket.outputstream发送请求,并通过socket.inputStream解析响应,或使用Apache HttpComponents或HTMLUnit等浏览器模拟器。

我不会让我的网络应用程序的用户在Facebook网站附近的任何地方 - 我会有自己的页面要求FB登录,并将使用上述两种方法之一处理与facebook网站的交互。我倾向于使用HTMLUnit,因为它看起来像是远程站点的浏览器。