Ich lese derzeit durch und arbeite die Beispiele in Getting Started with Grails, Second Edition by Scott Davis & Jason Rudolph.Verhindern Methode in Grails Controller als Aktion freigegeben werden
Dieses Buch wurde mit Grails 1.2 geschrieben.
Sie haben ein Codebeispiel, wo sie eine debug()
-Methode erstellen, die von beforeInterceptor
aufgerufen wird, und erklärt, dass seit debug()
eine Methode ist, wird es dem Benutzer über URL nicht ausgesetzt. Sie erklären, dass Closures dem Endbenutzer als Controller-Aktionen offen gelegt werden, Methoden jedoch nicht.
ich auch auf der Grails 1.3 documentation sah, verweisen sie auf eine reguläre Methode:
def auth() { ... }
als privat behandelt werden, weil es sich um ein Verfahren, kein Verschluss ist. Was ab Grails 1.3 galt.
Allerdings ab Grails 2.0.0, Controller Actions can be implemented as both methods and closures.
Das brachte mich dazu, mich zu wundern (und zu versuchen, herauszufinden) eine Möglichkeit, die in pre-Grails 2.0.0 vorhandene Funktionalität zu replizieren, eine Methode in einem Controller zu erstellen, der nicht dem Endbenutzer zugänglich gemacht wird.
Ich dachte über zwei mögliche Ansätze nach und fragte mich, welcher wäre besser Stil/Praxis und warum?
- als private Einstellung Accessor, das heißt
private def auth()
Einstellung allowedMethods für die Methode zu leeren String:
static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
beiden Ansätze schienen die gewünschte Wirkung zu erreichen. Der erste Ansatz gibt jedoch einen HTTP-Fehlercode 404 und der zweite Ansatz gibt einen HTTP-Fehlercode 405.
Wer weiß, welcher Ansatz vorzuziehen wäre? Gibt es noch andere Ansätze oder eine "Best-Practice-Technik"?
+1, Methoden, die nicht nur ausgesetzt werden sollten nicht "ausgesetzt" werden, nicht "nicht zulassen". – shihpeng