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?
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
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
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ń. –