Spring 框架:返回所有 METHODS 的 HTTP OPTIONS(get、put、post、delete、trace、head、options)
Posted
技术标签:
【中文标题】Spring 框架:返回所有 METHODS 的 HTTP OPTIONS(get、put、post、delete、trace、head、options)【英文标题】:Spring framework: HTTP OPTIONS returning all METHODS (get, put, post, delete, trace, head, options) 【发布时间】:2014-06-18 05:06:09 【问题描述】:我编写了一个 Spring Web 应用程序。除了一件事之外,相当稳固。应用程序返回一个 HTTP OPTIONS 请求,响应为“允许:GET、HEAD、POST、PUT、DELETE、OPTIONS”,但事实并非如此,只允许 GET 和 POST。其他操作(GET 和 POST 除外)返回“操作不支持”错误 405 和服务器名称和版本...等。安全团队不喜欢服务器的所有详细信息都返回“不支持”错误消息。
我花了很多时间尝试覆盖该错误页面或为 405 引入自定义错误页面......但我没有成功。 我花了一整天的时间试图禁用 HTTP OPTIONS。没有成功。 还有一个细节,我运行 curl 语句来测试:
curl "http://localhost:8080/webappX/welcome.htm" -X PUT -v
我的应用返回:
HTTP Status 405 - Request method 'PUT' not supported
Tomcat/6.0...etc
由于这些数据(tomcat 版本、服务器信息和响应元数据)可能被用于安全攻击,我如何创建一个自定义 405 页面来隐藏我的服务器的详细信息并提供非常少的错误页面? 或者我如何禁用 PUT、DELETE、TRACE、OPTIONS、HEAD,这样 Tomcat 可能会忽略它们或不提供有关我的服务器的内部信息。
谢谢
【问题讨论】:
【参考方案1】:您可以注册并使用Interceptor
,它将捕获对应用程序的所有请求,如果方法不是 GET/POST,则只需重定向到您选择的错误页面/发送错误响应。
public class MyInterceptor extends HandlerInterceptorAdapter
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
if (!request.getMethod().equalsIgnoreCase("POST") && !request.getMethod().equalsIgnoreCase("GET"))
// Not a POST/GET - send error and return false
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Unauthorized Request");
return false;
else
return true;
要注册拦截器,请将其添加到您的 spring xml 配置文件中
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="your.package.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
【讨论】:
非常感谢!你让我今天很开心。它适用于除 OPTIONS 之外的所有操作。对于选项,我必须将以下以上是关于Spring 框架:返回所有 METHODS 的 HTTP OPTIONS(get、put、post、delete、trace、head、options)的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC 框架学习---- 返回页面+加载静态资源