spring-mvc - Spring MVC/Tomcat 上出现许多并发请求的异常 403 行为

标签 spring-mvc tomcat tomcat7 http-status-code-403

我有一个带有 Hibernate、Jackson 和一长串其他库的 Spring 4.2.3 MVC 应用程序,它仅在一个服务器上表现出奇怪的行为,而其他四五个几乎相同的服务器表现正常。该应用程序在 Java 8 上的 Tomcat 7 中运行。

@RestController Controller 使用@PreAuthorize 来授权对端点的每个请求。当用户缺少所需的权限时,该请求返回 403(禁止)响应,使 session 无效,并且所有后续请求返回 401(未授权),直到该用户再次进行身份验证。

当用户拥有所有需要的权限时,问题服务器自发返回 403s。当用户缺少权限时,我们的权限评估程序会记录下来,在这种情况下,它不会记录任何内容(包括无异常(exception)情况)。服务器返回多个 403 响应,而不仅仅是一个后跟 401。此外,403 响应是默认的 Apache/Tomcat 输出,而我们将 Spring 配置为返回一个带有 403 的基本 HTML 页面,用于用户将看到它的遗留场景。所有这些让我认为问题存在于 Spring 应用程序之外,可能存在于 Tomcat 中。

在某些情况下,客户端可以向同一个端点发送大量 HTTP 请求 - 最多 42 个。我看到前 30 个左右返回 200 OK,接下来的 12 个都返回 403。我唯一的方法能够抑制自发的 403 是将 42 合并为四个 HTTP 请求。不管问题如何,这种整合都是一件好事,但我想了解这里的工作机制。如果我不知道服务器可以处理多少请求的限制,那么我将永远无法信任它。

目前我的想法是:

  1. 一些内置的 DOS 保护决定我有太多的同时请求并以资源密集度最低的方式响应
  2. Tomcat 达到线程限制并以不希望的方式使用react

在多台服务器中的一台服务器上可能导致此行为的原因是什么?

最佳答案

问题是 Apache 的 mod_evasive 模块。问题服务器配置了 DoS/DDoS 保护,因为它可以从外部访问。 mod_evasive 的存在是为了提供这种确切的行为 - 如果 Apache 根据其配置接收到太多请求,它会返回 403 响应作为低资源快捷方式。

关于spring-mvc - Spring MVC/Tomcat 上出现许多并发请求的异常 403 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47112507/

相关文章:

grails - 无法使用SSL从tomcat调用服务

spring - 无法解析为赋值表达式 : "${attrs ?: defaultAttrs}"

java - 同一 URL 的 POST 和 GET - Controller - Spring

spring - 错误 500 : Filter [Spring OpenEntityManagerInViewFilter]: could not be loaded

java - 为什么我不能将这个 ROOT.war 文件部署到我的远程 Tomcat 服务器中?当我重新启动 Tomcat 时,它会创建一个 "empty"ROOT 目录

java - 是什么导致 Tomcat 7 中出现 NotSerializableException?

java - HTTP 状态 500 - 实例化 servlet 类 org.springframework.web.servlet.DispatcherServlet 时出错

java - Maven部署到Tomcat

java.lang.UnsatisfiedLinkError : org. apache.log4j.nt.NTEventLogAppender.registerEventSource

java - Angular 2 : Using a . jsp 文件作为组件的模板