2012-04-06 14 views
1

, um sicher alle Formularübermittlung und alle Daten an den Server übermittelt zu machen, ist nicht durch GET ich dieses Stück Code gefundensicherstellen, dass keine Anforderungen sind durch GET-Methode in der Anwendung

if(request.method == 'GET') { 
     response.sendError(405) 
    } else { 
     // the rest of the delete action goes here 
    } 

Wir diese anwenden können in aus Basissteuereinrichtung, die so von allen Steuerungen ausgefahren ist, wird der Code nicht überall wiederholt. Die obigen Verfahren überprüft die bestehenden Verfahren ich wissen will, ist es eine Möglichkeit, die Methode POST in der gesamten Anwendung zu setzen, wie alle Formen und alle Daten sollten von POST vorgelegt werden. jede Konfiguration/Variable, die ich verwende, um dies zu setzen?
Vielen Dank im Voraus
Priyank

Antwort

4

Im Allgemeinen das ist, was die allowedMethods Karte für ist; wenn Sie die generate-controller oder generate-all Skript Ihren Controller verwenden dieses:

static allowedMethods = [save: "POST", update: "POST", delete: "POST"] 

und Sie können je nachdem, welche Aktionen erfordern POST Aktion Namen aus der Karte hinzuzufügen oder zu entfernen und die erlauben GET. Sie können dies in einer Basisklasse setzen und Unterklassen ermöglichen die Basisklassendefinition wieder zu verwenden und es mit diesem Ansatz hinzu:

static allowedMethods = BaseController.allowedMethods + [createUser: "POST"] 

Das erfordert, dass Sie diese Basisklasse zu erweitern, so ist es einfach zu vergessen. Ein besserer Ansatz könnte also sein, einen Filter zu verwenden; Sie kann man mit dem Befehl create-filters erstellen. Sie

def filters = { 
    postOnly(controller:'*', action: 'save|update|delete') { 
     before = { 
     if (!request.post) { 
      response.sendError(405) 
      return false 
     } 
     true 
     } 
    } 
} 

und zusätzlich zu den Verkettungszeichen getrennten Aktionsnamen (für Controller-Namen Sie können das gleiche tun):

So zum Beispiel einen Filter, wie dies mit einer expliziten Liste der Aktionen nicht zuzulassen haben könntest Sie können auch Platzhalter verwenden, sodass Sie jede Aktion hinzufügen können, die mit "create" beginnt:

postOnly(controller:'*', action: 'save|update|delete|create*') { 
+0

Danke Burt für die Lösung. Ja, wir planen, Filter von Basis-Controller zu bewegen, aber wir haben noch ein paar anderen Anrufe in den Basis-Controller haben wie Sanitizer Plugin ruft für alle params in der Anfrage usw. wir die Base jetzt in der Lage, nehmen würden nicht. Auf etwas nicht verwandtes Thema, wollte ich wissen, ob jemand die HDIV API in Grails erfolgreich integriert –