我如何禁用选项请求方法甚至在 dropwizard 中被处理

How do i disable options request method from being even processed in dropwizard

我向我的 dropwizard 应用程序发送了带有 OPTIONS 请求方法的 curl 命令。我得到 200 Ok 和 POST 以及允许的 OPTIONS 方法作为响应。

出于安全原因,我该如何阻止这种情况发生,因为这提供了有关支持内容的一些信息。

我尝试实现一个自定义请求过滤器,该过滤器以 405 not allowed 响应选项方法,并使用 NameBinding 添加到资源,但我认为 OPTIONS 请求此时未到达所以我仍然得到 200OK 和相同的 POST,OPTIONS 纯文本响应。

我还尝试在 environment.servlets.addFilter() 中使用 CrossOriginFilter.class 并将其配置为不允许 OPTIONS 请求。但这也没有用。

我在这里得到另一个 post : Disable OPTIONS Method Jetty Server

但是我如何通过 java 代码在 dropwizard 中实现这一点?

您可以通过在 YAML 配置文件中指定允许的方法来禁用 DW 中全局应用程序级别的 OPTIONS 请求:

server:
  allowedMethods:
  - GET

应用程序现在对所有 OPTION 请求返回 405。

我想通了,

在 dropwizard 的上下文中:

实现此目的的两种方法是

  1. [简单方法] 创建请求过滤器并根据要禁用 OPTIONS 请求的 URL 列表进行过滤。

  2. [很酷的方式] 如果你想在特定的 API 资源方法上使用像 @OptionsFilter 这样的基于注解的过滤器。

方法二详解: 首先,您需要扩展 ApplicationEventListener 并注册所有这些方法 在 APPLICATION_START 事件期间(使用反射)。 然后,您还扩展 RequestEventListener 并监听事件,然后从 uriInfo 中找到您在 request context 中获得的方法,然后检查您在应用程序启动时创建的方法列表.有关更多示例实现,请参阅 @UnitOfWork 注释如何工作并为资源方法设置 SessionFactory