2010-03-23 85 views
0

我们有一个通用的JSF 1.1(myfaces 1.1.4,tomahawk 1.1.9,使用“* .jsf”映射到jsp文件)我们需要一种更灵活的方式来处理用户登录。基本问题是,应用程序本身并不知道用户需要连接到哪个后端,并且直到现在,该应用程序作为参数添加到通用登录页面的URL中。JSF 1.1:使用/ login/foo和/ login/bar代码服务

这已经被证明是容易出错,所以我调查,如果我们除了

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 

可以从“/登录/ *”,这样我们可以有“/登录/ foo的路径映射“和”/ login/bar“作为普通,健壮的URL。

为此,我需要让它们全都映射到相同的底层JSP文件,然后必须能够识别是否使用了“foo”或“bar”,以便我们可以在登录页面相应地标记它。特定于环境的信息位于可用于登录页面的属性文件中。

我已经阅读了JSF 1.2规范,但它是一个相当大的干草堆,我没有看到针。

这可以以标准方式完成吗? (即独立执行)如果我用Tomahawk升级到Mojarra,可以这样做吗?

我错过了一些明显的东西吗?

回答

1

这不在JSF的责任范围之内。到目前为止,您需要一个Filter,它在/login/*url-pattern上侦听,从中提取路径部分,并且将请求转发给例如"/login.jsf?path=" + path

您可以选择一个或reuse one

+0

JSF内部必须存在从URL到JSP的映射。 “login.jsf?foo = bar”方法正是我想要摆脱的。 – 2010-03-23 12:58:45

+0

嗯,不是这样,就是升级到JSF 2.0,它具有更好的'GET'支持。顺便说一下,如果您的主要关注点实际上是避免混淆bean代码以处理'GET'请求参数,那么您可以使用'透明地将给定示例中的'path'请求参数设置为managed bean属性>'在'faces-config.xml'中''''{{param.path}''的'''。 – BalusC 2010-03-23 13:03:04

+0

顺便说一句,再次思考这个问题,你是否知道前锋(我已经尝试在我的答案中强调*正确)和重定向之间的区别?随着前进,在浏览器地址栏中的URL的变化**没有反映**,这似乎更多是你的主要关注。 – BalusC 2010-03-23 13:30:21