Czy u kogoś z Was jest security w Springu robione "ręcznie"?
Standardowy sposób to zdefiniowanie beana gdzie ustawiany które ścieżki są publiczne, które są prywatne, które endpointy wymagają jakich roli no i kontekst wywołania jest ustawiany w SecurityContextHolder
. Zauważyłem, że przez to potem często w projektach jest tak, że w testach integracyjnych są porobione jakieś patologiczne mocki i w sumie to security nie jest w ogóle testowane xd.
Czy nie lepiej po prostu tego security zrobić w ten sposób:
@DeleteMapping("/{id}")
ResponseEntity<?> deleteProduct(HttpServerRequest request, @PathVariable UUID id) {
return securityService.onlyAdmin(request, ctx -> productService.delete(id, ctx));
}
Gdzie ten SecurityService
bierze sobie po ludzku request, wycuąga token, waliduje, wyciąga claimsy/payload, sprawdza role i buduje kontekst wywołania. Zwykły prosty dekorator zamiast beana.. u kogoś tak się to robi? Ewentualnie jakie to ma wady? Bo ja nie widzę.