2013-01-31 12 views
25

Używam zabezpieczeń Spring z @PreAuthorize na moich metodach kontrolera. Moje rozumowanie polegało na tym, że chciałem, aby sprawdzanie uprawnień odbywało się w przewidywalny sposób w jednej warstwie i jak najwcześniej w żądaniu. Jednak po prostu przeczytałem dokumentację dotyczącą bezpieczeństwa wiosennego 3 i zauważyłem, że zalecają stosowanie zabezpieczeń poziomu metod w warstwie usług (ale nie mówią dlaczego).Czy adnotacje na poziomie metody sprężynowania powinny być stosowane w warstwie kontrolera lub w warstwie usługi?

Moje pytanie brzmi: czy wiosenne adnotacje poziomu zabezpieczeń powinny być stosowane w warstwie kontrolera lub w warstwie usługi? (Lub "oba" lub "to zależy"?) Co ważniejsze: dlaczego?

Odpowiedz

13

"To zależy" :). Jeśli aplikacja ma warstwę usług, za pośrednictwem której stosowana jest cała logika biznesowa, zwykle jest to czyste miejsce do zastosowania ograniczeń bezpieczeństwa i pewności, że nie pominąłeś żadnych przypadków narożnych.

Kod WWW jest generalnie bardziej nieuporządkowany, jest go więcej, zmienia się szybciej i może się skończyć wywoływaniem tych samych metod obsługi z wielu miejsc. Ktoś może dodać nowy kontroler i zapomnieć go zabezpieczyć. Alternatywnie możesz mieć różne typy klientów wywołujących te same usługi.

Ale to zależy od tego, jak aplikacja jest zorganizowana i jakie są Twoje przypadki użycia. Możesz mieć dobry argument, dlaczego chcesz zabezpieczyć kontroler.

+0

Dzięki, wspomniałeś o dobrych argumentach za zapewnienie bezpieczeństwa usługi. Co uważasz za dobre argumenty za zabezpieczeniem kontrolera? Również dla kontekstu aplikacja, którą mam na myśli, ma zasadniczo metodę usługi na punkt końcowy kontrolera, ponieważ moja usługa definiuje granice transakcji. Tak więc ta sama metoda usługi jest wywoływana tylko z jednego miejsca i nie ma innych klientów korzystających z usługi. – Jay

+0

Innym powodem, dla którego pomyślałem o umieszczeniu autoryzacji w usłudze, jest pytanie, kto może uzyskać dostęp do usługi, która może być decyzją biznesową i jako taka może być zlokalizowana zgodnie z logiką biznesową. – Jay

+1

Nie mam żadnych dobrych argumentów za zabezpieczeniem kontrolera przed warstwą usługi. Nie oznacza to, że mogą nie istnieć w konkretnych przypadkach. Twoje wymagania mogą określać reguły na podstawie danych, które normalnie są dostępne tylko w warstwie internetowej, na przykład takich jak nagłówki żądań. –

9

Pomyśl o ponownym użyciu kodu. Czy zamierzasz korzystać ze swojej usługi w innym miejscu? Nie tylko po to, by zasilać swoją warstwę sieciową? Wykorzystujemy również nasze usługi z mostami JMS, dlatego zabezpieczamy naszą warstwę usług.

+1

to dobry punkt do rozważenia, dziękuję. W tym konkretnym przypadku usługa jest przeznaczona wyłącznie do podawania warstwy sieci. – Jay

0

Myślę, że usługa jest lepszym miejscem do korzystania z niej.

Despites some problems że @PreAuthorizecould present na Controller i sprężyna Bezpieczeństwa FAQ recommends umieścić ten rodzaj adnotacji o służbie, rozumiem, że upoważnienie do akcji to raczej reguła biznesowa wówczas odpowiedzialność za warstwie internetowej.

Powiązane problemy