好的,我们有一个单点登录,用户可能会进入www.blabla.com/AppName/进入我们的网站。然后我们定义一个欢迎站点,使用phaselistener来检查:
用户是否正在尝试访问欢迎网站?是的 - >尝试登录 - 有效吗?是的 - >获得用户角色 - >转发到此特定用户的相应站点。
E.g。用户niceBelly转到页面/somewhere/in/many/folders/beer.jsf并且用户barbie转到/breasts/pink.jsf 由于某些原因,此应用程序中的重定向不可能。
结果是达到例如page pink.jsf地址栏仍显示blablaba.com/AppName/ 点击第一个链接将导致浏览器使用表单地址作为新URL,例如在welcome.jsf我导航到coolstuff.jsf。在页面coolstuff上我现在有最后一个表格的网址,例如welcome.jsf。然后在很酷的东西上我点击一个链接,并在下一页上获取coolstuff作为网址,依此类推。
有没有办法解决这个/解决它?
答案 0 :(得分:3)
鉴于这些症状,您实际上并未重定向请求,但实际上您正在转发请求。当您致电
时,将发生真实的重定向externalContext.redirect(url);
在JSF上下文中,或者当您添加
时<redirect />
导航案例。所有其他方式都是有效的前锋。根据症状,您使用commandlinks而不是outputlinks导航到其他页面。 Commandlinks将向当前URL提交POST请求,当导航案例不包含RequestDispatcher
时,JSF将使用<redirect />
设置请求/响应的目标。转发不会指示浏览器在目标URL上触发新的GET请求,因此浏览器地址栏中的URL不会更改。 真正的重定向将完全相同。