0

好的,我们有一个单点登录,用户可能会输入 www.blabla.com/AppName/ 以访问我们的站点。然后我们定义一个欢迎站点,使用 Phaselistener 来检查:

用户是否试图访问欢迎站点?是的-> 尝试登录- 有效吗?是 -> 获取用户角色 -> 转发到该特定用户的相应站点。

例如,用户 niceBelly 转到页面 /somewhere/in/many/folders/beer.jsf 并且用户 barbie 转到 /breasts/pink.jsf 由于某些原因,此应用程序中无法进行重定向。

结果是,当到达例如页面pink.jsf 时,地址栏仍然显示blablaba.com/AppName/ 单击第一个链接将导致浏览器使用表单地址作为新URL,例如在welcome.jsf 我导航到coolstuff.jsf。在coolstuff 页面上,我现在有了最后一个表单的url,例如welcome.jsf。然后在很酷的东西上,我单击一个链接,然后在下一页上获取很酷的东西作为 url,依此类推。

有没有办法解决这个/解决它?

4

1 回答 1

3

鉴于这些症状,您实际上并没有重定向请求,而是实际上转发了请求。当您致电时,将发生真正的重定向

externalContext.redirect(url);

在 JSF 上下文中,或者当您添加

<redirect />

到导航箱。所有其他方式都是有效的转发。根据症状,您使用的是命令链接而不是输出链接来导航到其他页面。Commandlinks 将向当前 URL 提交一个 POST 请求,RequestDispatcher当导航案例不包含<redirect />. 转发不会指示浏览器在目标 URL 上触发新的 GET 请求,因此浏览器地址栏中的 URL 不会更改。真正的重定向会做到这一点。

也可以看看:

于 2011-04-01T13:24:54.263 回答