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 之外的所有操作。对于选项,我必须将以下 dispatchOptionsRequesttrue 添加到 web.xml 和它像魅力一样工作。你摇滚!! 并且在 myInterceptor.java 而不是提供一些服务器信息的默认 Forbidden 页面中,我刚刚创建了一个 405.htm 页面并将 response.sendredirect() 发送到该页面,如下所示: response.sendRedirect ("405.htm");

以上是关于Spring 框架:返回所有 METHODS 的 HTTP OPTIONS(get、put、post、delete、trace、head、options)的主要内容,如果未能解决你的问题,请参考以下文章

Spring

框架:Spring

Python String Methods 2

Spring MVC 框架学习---- 返回页面+加载静态资源

使用 Spring 框架在 Openshift JSON 对象中返回的问题 [重复]

jQuery ajax调用返回URL并加载到框架或div中