Spring框架:HTTP OPTIONS返回所有METHODS(get,put,post,delete,trace,head,options)

我写了一个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可能只是忽略它们或者不提供有关我的服务器的内部信息。

谢谢

您可以注册并使用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配置文件中