Spring框架:HTTP OPTIONS返回所有方法(get,put,post,delete,trace,head,O



我写了一个springweb应用程序。除了一件事外,非常坚固。应用程序返回一个HTTP OPTIONS请求,响应为"Allow: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可能会忽略它们或不提供有关我的服务器的内部信息。

感谢

您可以注册并使用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;
        }
    }

}

要注册拦截器,请将其添加到springxml配置文件中

<mvc:interceptors>
<mvc:interceptor>
    <mvc:mapping path="/**" />
    <bean class="your.package.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>

最新更新