【问题标题】:response.sendError(403), but return is 404response.sendError(403),但返回的是 404
【发布时间】:2017-07-20 12:19:54
【问题描述】:

这样的代码:

void doFilter(request, response, chain){
  try{
    //something code process
    validate(request);
    chain.doFilter(request,response);
  }
  catch(Exception e){
    response.sendError(403,"Forbidden");
  }

}
void validate(request) throws Exception{
   //validate params,if not validate,just throw exception.
}

直接访问web项目,不通过nginx之类的。 但是状态返回总是404,这里有人可以帮助我吗?非常感谢。
顺便说一句,当我在 Windows PC 上运行该项目时,我得到了正确的状态,但在 linux 上却没有工作。

【问题讨论】:

  • 您的代码没有返回它。请求未处理(因此返回 404 未找到)。可能是映射错误或 URL 或其他错误
  • 我确定请求是进入这个过滤器并运行代码,但是当抛出异常时,使用 sendError() 方法似乎不起作用。 ps:我刚刚更新了上面的代码。
  • 您是否有另一个处理程序在出错时将用户重定向到某处?例如,如果返回 403,您可能会重定向到某个未找到的“错误页面”?

标签: java http web filter response


【解决方案1】:

404 的响应码表示未找到。您尝试向 URL 发送请求,但服务器找不到该 URL,因此您的代码将无法运行,因此 404 而不是 403。您需要检查 URL 的设置并找出您的 URL 不匹配的原因。可能是重写规则。当您解决该问题时,您的代码将运行并尝试执行chain.doFilter。如果不成功,会返回403

【讨论】:

  • 我确定请求是进入这个过滤器并运行代码,但是当抛出异常时,使用 sendError() 方法似乎不起作用。
  • @user3548664 你用调试器试过了吗?是否输入了您的代码?
  • 是的,肯定是输入了这个过滤码。我尝试使用参数进行验证,当它没有被验证时,它会抛出一个异常来运行 sendError() 方法。
  • @user3548664 这可能意味着您在 sendError 上发送请求并且找不到该请求的目标。
  • @Lajos Arpad ,我使用请求来获取验证参数,所以找不到请求似乎不是原因。我在我的 Windows PC 上获得了正确的状态,但未能在 Linux 上获得正确的状态。这真是一个奇怪的点。
猜你喜欢
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 1970-01-01
  • 2011-12-18
  • 2016-10-09
  • 2011-11-08
相关资源
最近更新 更多