Facebook 结合一次过的;拨备;使用JSF处理?

Facebook 结合一次过的;拨备;使用JSF处理?,facebook,jsf,servlets,jsf-2,javabeans,Facebook,Jsf,Servlets,Jsf 2,Javabeans,让我先承认这是我的第一个webapp,也是第一次体验JSF,所以我可能做了一些糟糕的设计决定 以下是我想做的: 我有一个使用JSF2.0的webapp,可以通过Facebook画布访问。此webapp允许用户查看/操作传感器读数数据库中的数据。Facebook用户第一次访问我的应用程序时,我要求用户输入数据库的登录凭据,然后将用户发送到主页。此后,用户应始终直接进入主页,因为我将用户的FB id与数据库用户配置文件相关联 当前实施: 我将Facebook画布URL转到一个servlet。这个se

让我先承认这是我的第一个webapp,也是第一次体验JSF,所以我可能做了一些糟糕的设计决定

以下是我想做的: 我有一个使用JSF2.0的webapp,可以通过Facebook画布访问。此webapp允许用户查看/操作传感器读数数据库中的数据。Facebook用户第一次访问我的应用程序时,我要求用户输入数据库的登录凭据,然后将用户发送到主页。此后,用户应始终直接进入主页,因为我将用户的FB id与数据库用户配置文件相关联

当前实施: 我将Facebook画布URL转到一个servlet。这个servlet检查Facebook传递的signed_请求参数以获取用户ID,然后查看数据库中的用户是否已经完成了配置过程。如果用户已经这样做,他将被重定向到应用程序主页

问题: 我执行这些检查的大部分逻辑目前都存在于托管bean中(会话范围)。为了在servlet中使用bean,我手动实例化bean并将其添加到会话中,因为JSF框架还没有机会创建它。随着我的系统变得越来越复杂,由于各种bean之间的依赖关系,这会导致问题。而且,这似乎是解决这个问题的一个糟糕的方法

解决方案?从我的网络搜索中,似乎有几种方法可以做到这一点。一种方法是将canvas设置为JSF登录页,其中托管bean将获取签名的请求参数,并验证用户是否完成了配置步骤。从那里,bean将转发到适当的页面。另一种可能是有一个热心的bean做同样的事情,但这似乎是“错误的”

解决这个问题并坚持“适当的”JSF范例的最佳方法是什么


提前谢谢

有许多不同的方法可以解决这个问题。JSF登录页是一个想法,而eangerbean是处理这个问题的一些方法

如果你忽略了与Facebook集成的事实,那么最终你是在试图解决身份验证和授权问题。Facebook正在处理您的身份验证,并告诉您的web应用程序用户的身份是什么,您的web应用程序的工作是在整个会话过程中记住此人的身份,并授权此人访问请求的页面

我以前实现过它,我让所有托管bean扩展一个BaseBean类,在创建和初始化时检查是否存在包含用户标识信息的特定SessionScoped bean。如果这个bean不存在或者没有被授权访问这个bean,那么我会重定向。这种方法的问题在于,它只授权使用托管bean,而不授权使用页面

我使用的另一种方法是使用servlet过滤器,它基本上会检查每个页面请求,并查找包含当前已验证用户的会话范围bean。如果没有找到,那么我将查找特定的请求参数,进行身份验证并创建会话bean,如果不存在,则将重定向到未经授权的页面


在我意识到JavaWeb应用程序的身份验证和授权是一个被广泛理解且近乎普遍的问题之前,这种方法一直很有效。经过一点观察和研究,我发现像SpringSecurity3这样的安全框架确实可以集成到JSF中,并处理几乎所有复杂身份验证和授权的复杂性。您可以非常轻松地集成一个定制的Facebook身份验证处理程序,以实现Spring安全性,并控制用户角色对单个页面级别的访问,所有这些都是通过XML配置实现的。如果你有时间学习新东西,这是非常值得研究的。

谢谢你的投入!这基本上是一个原型实现,所以我现在不太担心安全性。无论如何,我的应用程序不允许在没有来自Facebook的有效签名请求的情况下检索数据,所以我认为我目前是相当安全的。当涉及到生产代码时,我将研究一种更健壮的安全机制。