我如何禁用选项请求方法甚至在 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