【问题标题】:How do I obtain the 'reason' for a forbidden()?如何获得禁止()的“原因”?
【发布时间】:2012-09-27 22:01:34
【问题描述】:

我正在设计我的 403 页面,但我似乎无法获得我在各种禁止页面上填充的“原因”字符串,以便对手头的问题给出更相关的响应。如果我在模板中键入 ${response.reason},整个页面将被替换为仅响应的文本。

【问题讨论】:

    标签: java playframework-1.x


    【解决方案1】:

    在代码中,您似乎可以通过这样做在模板中获取此值

    ${result.getMessage()}
    

    result 是您的 Forbidden 对象,它继承自 RuntimeException,您提供的描述作为异常消息传递给基类

    【讨论】:

      【解决方案2】:

      您不想再提供“禁止”的理由。从安全的角度来看,用户尝试了未经授权的操作,而您要做的最后一件事就是告诉他们究竟出了什么问题(未知用户、无效密码等)。如果你这样做,你就是在泄露可以帮助用户渗透你系统的信息。

      例如,如果您区分未知用户和无效密码,您将放弃该用户标识是否存在。

      【讨论】:

      • 对于我的设置,我不同意。未知用户和无效密码无法访问我的 403 页面。在这些情况下,他们会被发送到登录页面并提示登录。如果他们随后登录并尝试访问仅限于他们的页面,这就是我的 403 页面出现的时候。例如:如果用户是组织的一部分,他们有一个“编辑组织”页面。如果他们将该链接发送给不属于该组织的人,我想将他们发送到我的禁止页面,包括“您不属于该组织”。作为“原因”。
      • 为了更清楚一点,我根据用户访问此信息所需的安全性来分解我的控制器,在每个控制器中我都有 @Before 方法来检查给定的身份验证用户具有适当的权限。如果不是,我打电话给禁止(“这就是您无法访问该页面的原因。”);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2019-02-15
      • 2019-09-03
      • 2021-11-30
      • 2016-02-02
      • 2021-09-13
      • 1970-01-01
      相关资源
      最近更新 更多