1

我对 ICEfaces 还很陌生,但总体上已经有 JSF/Facelets 和 Java EE 的经验。

目前,除了一些实用程序标签(如 outputStyle 和 outputDeclaration)之外,我并没有使用太多 ICEfaces,但即使这样也真的很不错。

尽管我计划稍后使用一些 AJAX 功能,但我有一些 h:forms(或 ice:forms)我想作为正常的 JSF POST 请求发送,而不通过 /block/send-receive-updates。原因是,我想使用一个过滤器,它作用于请求的 URI,如果所有内容都发送到 /block/send-receive-updates,这是不可能的。

有没有办法做到这一点?

编辑:澄清我想要做什么:

我们正在开发的网站由公开的页面和一些只有注册会员才能访问的页面组成。servlet 标准中定义的基于 FORM 的标准安全机制非常不灵活,因为它只允许定义显示的单个登录页面,当有人想要访问某些受限内容时。因为我们还希望用户能够使用每个页面上可见的小型登录表单来登录,所以我们开发了一个过滤器,它几乎像 Web 容器一样处理身份验证和授权。如果用户未经过身份验证/授权,它会重定向到自定义登录页面,但也允许从支持 bean 对用户进行身份验证。为了使其工作几乎透明,它包装了 HttpServletRequest 以提供 Principal 和用户角色。

当过滤器重定向到自定义登录页面时,它会保存当前请求,以便稍后在用户成功通过身份验证时“重放”它。为此,过滤器必须能够检测 POST 请求是否来自登录页面(因此用户现在是否已通过身份验证/授权)。但是,如果每个 POST 都通过 /block/send-receive-updates 进行,这将不再起作用。

当然,我可以排除登录页面由 ICEfaces 处理,但这意味着我不能在登录页面上使用任何 ICEfaces/AJAX。

4

2 回答 2

1

我已经使用 IceFaces 将近一年了,还没有遇到任何不通过 send-receive-updates 提交表单的方式。但我很好奇,你说“我打算稍后使用一些 AJAX 功能”。IceFaces 的重点是它几乎透明地将 AJAX 添加到您的 JSF 应用程序中。这是一种“全有或全无”的事情——任何使用 IceFaces 的页面都将使用 AJAX。

我能想到的唯一一件事就是不要将 IceFaces 用于要在其上使用 POST 请求的页面 - 即,您可以将 IceFaces 页面映射到 *.iface,但将普通 JSF 映射到 *.faces。

或者,很可能还有其他方法可以完成您想要使用过滤器执行的操作。

于 2009-02-20T16:37:45.743 回答
1

这可能不是最好的方法,但它可能是一种方法。为了争论,我假设您的标题包含您的额外登录表单。如果您要在单独的框架或主布局页面中制作标题并将您的 JSF 页面嵌入到 iframe 中,这可能会起作用。这个想法是因为它被呈现为一个单独的页面,您可以以单独的方式处理它。

此外,可能有一种不同的方式来处理您的安全性,这会使它更像 IceFaces-y。也许,当您点击过滤器并确定您没有登录时,它应该创建一个 bean(可能是会话),其中包含来自原始请求的信息(URL、参数等)并将您发送到登录页面。登录页面完成它的工作,添加您的安全内容,然后使用该会话 bean 中的信息强制重定向到您的新页面。您可以使用 FacesContext 来获取您的 HttpContext 并进行重定向。您可能需要使用重定向来添加任何适当的参数。最后,您应该摆脱会话 bean。

最后,我知道有几个框架(Spring WebFlow,想到了)可以保存您的请求状态,让您进行登录,并将您无缝地重定向回最初的位置(其中,提醒我,我认为 Seam 也可以做到这一点。可能 Orchestra 和您的其他框架也是如此。)

希望这可以帮助!

于 2009-02-25T00:59:49.840 回答