2016-10-29 9 views
1

ich eine Menge Fehler in meiner Feder MVC-app von einigen Kunden anfordert HTTP PROPFIND verursacht bekommen:Filter bestimmte HTTP-Verben im Frühjahr mvc

16: 59: 39.402 ERROR [foo.bar.controllers.ExceptionHandlingController] (standard task-12) Uncaught Fehler: org.springframework.web.HttpRequestMethodNotSupportedException: Anforderungsmethode 'PROPFIND' nicht unterstützt

Wie kann ich diese Anfragen filtern, so dass sie keinen Fehler in jedem Controller erzeugen?

Danke!

+0

Habe meine Antwort Hilfe? – developer

Antwort

1

Sie können Spring HandlerInterceptor wie unten ermöglichen & Prozess die erforderlichen Anforderungen hinzufügen sollte.

RequestMethodInterceptor Klasse:

package com.myproject.RequestMethodInterceptor; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class RequestMethodInterceptor implements HandlerInterceptor { 
    @Override 
    public boolean preHandle(HttpServletRequest request, 
      HttpServletResponse response, Object handler) throws Exception { 
     //Added PROPFIND method, add any other types NOT allowed 
     if(request.getMethod().equals("PROPFIND")) { 
      //Log or Ignore upon your requirement & return false 
      return false; 
     } else { 
      return true; 
     } 

    } 
} 

XML-Konfiguration:

<mvc:interceptors> 
     <bean class="com.myproject.RequestMethodInterceptor" /> 
    </mvc:interceptors> 
+0

Und wenn eine andere unbekannte Methode gesendet wird, müssen sie ihren Code ändern. Eine Whitelist ist vorzuziehen, findest du nicht? – zeroflagL

+0

Ja, Sie haben Recht, wir können eine Whitelist erstellen und validieren – developer

1

Sie haben die Feder konfigurieren org.springframework.web.servlet.DispatcherServlet in OPTIONEN In der web.xml verwalten Sie so etwas wie dieses

<servlet> 
    <servlet-name>springServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>dispatchOptionsRequest</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
+0

Was genau hat 'OPTIONS' mit' PROPFIND' zu tun? – zeroflagL

+0

Ich sah auf Frühling Dokumentation und alten Forum, dass es notwendig ist, Optionen zu aktivieren; Ich habe es nie ausprobiert, aber wenn der Frühling sagt, dann glaube ich es –

+1

_ "Es ist notwendig, Optionen zu aktivieren" _ Aber OP's Frage geht nicht um OPTIONEN. Noch wichtiger: Das OP möchte die Anfragen NICHT bearbeiten. Sie möchten die Anfrage verwerfen. – zeroflagL