3

标题几乎不言自明,但总是检查isCommitted()类型是否有价值ServletResponse?我的特定示例是使用过滤器,如果用户无权执行特定操作(CSRF 检查具体),我会执行以下操作:

if (!httpResp.isCommitted()) {
    httpResp.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}

在这种情况下,我检查了响应几乎感觉有点矫枉过正。我的过滤器位于链的顶部,在它之前应该没有任何东西会提交响应(更不用说允许过滤器链继续如果它这样做了),但我不禁觉得这是一个假设我不应该制作的良好防御性编程的名称。我觉得检查响应的状态是个好习惯。

那么,综上所述,在这个时间点检查响应是否有价值?为了进一步扩展这一点,每次 修改响应时始终检查这一点是否是一种好习惯?就我而言,除了当 CSRF 令牌不匹配时抛出的异常(假设这只会在攻击场景中发生)之外,我几乎找不到支持其他东西的理由。

4

1 回答 1

0

通常,根据某些代码的执行时间,您知道响应尚未提交。我不会在任何地方添加此检查。

有些地方我会添加它:-

  • 一段可能在各种不同上下文中调用的库代码
  • 在响应提交之前或之后可能到达的异常处理代码
于 2015-07-20T06:33:45.427 回答