Aktualnie czytam i pracuję nad przykładami podanymi w Getting Started with Grails, Second Edition by Scott Davis & Jason Rudolph.Zapobieganie ujawnianiu metody kontrolera Grails jako akcji
Ta książka została napisana przy użyciu Grails 1.2.
Mają przykładowy kod gdzie tworzą debug()
metody, która jest wywoływana przez beforeInterceptor
i wyjaśnił, że ponieważ debug()
to metoda, nie jest narażony na zewnątrz do użytkownika za pośrednictwem adresu URL. Wyjaśniają, że Zamknięcia są ujawniane jako Działania kontrolujące dla Użytkownika końcowego, ale metody nie są.
Widziałem też na Grails 1.3 documentation one nawiązują do zwykłego sposobu:
def auth() { ... }
traktowane jako prywatne, ponieważ jest to metoda, a nie zamknięcie. Tak jak w przypadku Grails 1.3.
Jednak, jak z Grails 2.0.0, Controller Actions can be implemented as both methods and closures.
Doprowadziło mnie to do zastanowienia (i spróbowania wymyślić) sposobu na odtworzenie funkcjonalności dostępnej w Pre-Grails 2.0.0 w celu stworzenia metody w kontrolerze, która nie zostanie ujawniona użytkownikowi końcowemu.
Pomyślałem o 2 możliwych podejściach i zastanawiałem się, który byłby lepszy styl/praktyka i dlaczego?
- Ustawianie accessor jako prywatne, to znaczy
private def auth()
Ustawianie allowedMethods dla metody na pusty ciąg:
static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
oba podejścia zdawała się osiągnąć pożądany efekt. Jednak pierwsze podejście daje kod błędu HTTP 404, a drugie podejście daje kod błędu HTTP 405.
Czy ktoś wie, które podejście byłoby lepsze? Czy są jakieś inne podejścia lub "technika najlepszych praktyk"?
+1, metody, które nie powinny być narażone, nie powinny być "eksponowane", a nie "niedozwolone". – shihpeng