Какое исключение лучше всего подходит для описания отсутствия принципала безопасности Spring в дизайне RESTful, например, когда я получаю null
при получении принципала от SecurityContextHolder.getContext().getAuthentication().getPrincipal()
?
У меня есть проект с пользовательскимслужба авторизации, и одна ее часть нуждается в информации о Принципале, который вошел в систему и какие полномочия он имеет.
Некоторые (но не все) конечные точки REST также защищены Spring Security.
Однако система становится все больше и больше, и может произойти ошибка, когда неавторизованный пользователь пройдет через уровень контроллера,и попытается получить доступ к защищенным данным с помощью пользовательской службы авторизации.
С одной стороны, лучше всего подходит исключение AccessDeniedException
(Http 403), но с другой стороны это может бытьболее безопасный подход - бросить 500 или 404, чтобы «скрыть» существование запрошенного ресурса.
Я подумал о следующих исключениях:
- HttpStatus: 500 вызвано
org.springframework.security.access.AuthorizationServiceException
- HttpStatus: 403
org.springframework.security.access.AccessDeniedException
- HttpStatus: 500
caused by java.lang.IllegalStateException
- HttpStatus: 500
caused by java.lang.NullPointerException
Я не уверен, какойлучше подход - запретить, спрятать или кинуть внутреннюю ошибку сервера.