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

Posted

技术标签:

【中文标题】我如何禁用选项请求方法甚至在 dropwizard 中处理【英文标题】:How do i disable options request method from being even processed in dropwizard 【发布时间】:2018-10-27 16:49:52 【问题描述】:

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

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

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

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

我在这里收到了另一个帖子: Disable OPTIONS Method Jetty Server

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

【问题讨论】:

【参考方案1】:

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

server:
  allowedMethods:
  - GET

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

【讨论】:

我不能只为 url 模式做吗?【参考方案2】:

我想通了,

在 dropwizard 的上下文中:

实现这一点的两种方法是

    【简易方法】创建请求过滤器,并根据要禁用 OPTIONS 请求的 URL 列表进行过滤。

    [Cool way] 如果您想在特定 API 资源方法上使用基于注释的过滤器,例如 @OptionsFilter

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

【讨论】:

以上是关于我如何禁用选项请求方法甚至在 dropwizard 中处理的主要内容,如果未能解决你的问题,请参考以下文章

dropwizard问题记录1:如何进行mvn package打包,如何在项目目录下运行

使用Dropwizard的Jersey过滤器,拦截器和MessageBodyReader

在网络选项卡上过滤请求时如何永久禁用 chrome 的警告

Jetty 和 Dropwizard:如何始终返回 200 而不是 404、500 等

用户如何停止选择选择选项而不禁用它

如何禁用 Blogger API 的删除和更新帖子选项