【问题标题】:Is it possible to resolve navigation outcome in order to validate it?是否可以解决导航结果以对其进行验证?
【发布时间】:2018-03-01 10:29:01
【问题描述】:

我有一个 WebFilter 可以重定向到我的应用程序中的登录页面。为了将 back 重定向到引用页面,我还添加了一个名为 redirectOnLogin 的视图参数,然后在成功登录时使用该参数以执行最终导航。

如果要操纵这个查询参数,很容易引发 JSF 导航错误。因此,我想通过检查结果是否有效来先发制人,但我无法发现预先验证 JSF 结果的机制。

【问题讨论】:

    标签: jsf-2 jsf-2.2


    【解决方案1】:

    最简单和最好的方法是确保redirectToLogin 参数不能被操纵。或者检测到这种操纵。

    你可以通过(至少)两种方式解决这个问题

    1. 获取原始页面名称,为其添加“盐”并创建哈希。
    2. 在对登录服务器的请求中添加此内容
    3. 确保它是由登录服务器返回的(可以将它作为# 添加到返回页面或作为参数。
    4. 在“redirectOnLogin”页面上收到它时,使用页面名称、相同的盐并以相同的方式创建哈希。比较这些,如果它们匹配你就很好,如果它们没有抛出错误。

    或者你可以

    1. 将“redirectOnLogin”页面存储到会话中
    2. 检查从登录服务器返回是否与您最终访问的页面匹配。

    【讨论】:

    • 感谢您的建议!当然,两者都会起作用。事实上,我已经在考虑这些路线,但我仍然想知道所讨论的机制是否存在或是否有可能创建。
    • 我检查了 FacesContext 中的所有方法,深入了几层,没有发现任何会返回“true”或“false”来查看视图是否存在(即使用 my 知识)。但是,如果它存在或不存在,您将如何处理该结果?如果它不存在,无论如何你都会得到一个 404。如果它确实存在?让它去低谷(不想知道它是否被操纵)?所以唯一可能知道这是否可能的人是 BalusC,但我不确定他会为这个理论问题提供答案。干杯...
    • 好吧,如果结果无效,我将记录有关所述发生的信息并重定向“家”。如果它是有效的,我会去那里。毕竟,如果用户没有去那里的凭据,他只会被重定向回“家”。感谢您的输入!是的,我仍然希望看到 BalusC 从他的帽子里拉出一只兔子。上次我问这样的问题时,他将所需的功能放入了 OmniFaces。 :)
    • B=不知道如果有解决方案,他是否会将其放入其中(我认为不会)因为您仍然可以在建议的解决方案中出现“错误”时记录它。并且安全解决方案不应该依赖于 mvc 解决方案(我不会使用 jsf 视图参数,而是使用通用过滤器甚至现有的安全框架
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多