Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring HandlerInterceptor未捕获GET、POST以外的方法_Java_Spring_Spring Mvc_Tomcat - Fatal编程技术网

Java Spring HandlerInterceptor未捕获GET、POST以外的方法

Java Spring HandlerInterceptor未捕获GET、POST以外的方法,java,spring,spring-mvc,tomcat,Java,Spring,Spring Mvc,Tomcat,我的目标是不允许安全测试建议的选项、PUT、DELETEHTTP方法 简介 我有一个spring应用程序。我确实在其中嵌入了spring安全性 TRY-1 我试图将添加到web.xml ref- 这正在工作,但它提供了无效的响应头 回应 > Status : 403 > Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS 如上所述,不应返回Allow响应头 TRY-2 因此,我尝试添加HandlerInterceptor public clas

我的目标是不允许安全测试建议的
选项、PUT、DELETE
HTTP方法

简介

我有一个spring应用程序。我确实在其中嵌入了spring安全性

TRY-1

我试图将
添加到web.xml ref-

这正在工作,但它提供了无效的响应头

回应

> Status : 403
> Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS
如上所述,不应返回Allow响应头

TRY-2

因此,我尝试添加
HandlerInterceptor

public class HTTPMethodInterceptor implements HandlerInterceptor  {

    @Override
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
         if (request.getMethod().equalsIgnoreCase("options") ||
                 request.getMethod().equalsIgnoreCase("put")||
                 request.getMethod().equalsIgnoreCase("delete")) {
             response.sendError(HttpServletResponse.SC_FORBIDDEN, "Unauthorized Request");
             return false;
         }
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest arg0,
            HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
    }

    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
            Object arg2, ModelAndView arg3) throws Exception {

    }
}
编辑

通过在springConfig中注册

<mvc:interceptors>
  <bean class="com.HTTPMethodInterceptor" />
</mvc:interceptors> 

此预处理用于“GET”和“POST”方法。但它不适用于该方法的其余部分


如果我的理解有误,请纠正我。如果它是重复的,请原谅。

我使用了
CSRF
请求匹配器来完成这个技巧,它工作得很好

创建了一个请求匹配器,如下所示

 public class SecurityRequestMatcher implements org.springframework.security.web.util.matcher.RequestMatcher {
 public static final String OPTIONS = "options";
 public static final String DELETE = "delete";
 public static final String PUT = "PUT";

    @Override
    public boolean matches(HttpServletRequest request) {
         if (request.getMethod().equalsIgnoreCase(OPTIONS) ||
                 request.getMethod().equalsIgnoreCase(DELETE)||
                 request.getMethod().equalsIgnoreCase(PUT)) {
             return true;
         }
        return false;
    }
}
Spring配置为

<bean id="securityRequestMatcher"
      class="com.SecurityRequestMatcher"/>
<security:http>
<security:csrf request-matcher-ref="securityRequestMatcher"/>
</security:http>


宾果游戏:D

您需要它来处理所有请求,还是只处理某些URL?如何将这个
HandlerInterceptor
注册到Spring上下文中?@luboskrnac我需要它用于所有URL<代码>/*会很好。已编辑的登记问题