В моем API я люблю защищать конечные точки сведений о пользователе, чтобы обычные вошедшие в систему пользователи могли получить доступ только к своему профилю пользователя. Для этого я пишу контроллер:
@RequestMapping(value = URL_USER + "/{id}", method = RequestMethod.GET)
@ResponseBody
public PersistentEntityResource get(PersistentEntityResourceAssembler persistentEntityResourceAssembler, @PathVariable Long id) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
ApplicationUser loggedInUser = applicationUserService.findByUsername(authentication.getName());
ApplicationUser applicationUser = applicationUserService.findById(id);
if (applicationUser.getId().equals(loggedInUser.getId())) {
return persistentEntityResourceAssembler.toFullResource(applicationUser);
}
throw new IllegalAccessException();
}
Вместо того, чтобы вызвать исключение, которое приводит к InternalServerExcetption
, мне нравится возвращать стандартную ошибку весенней загрузки json, как показано ниже:
{
"timestamp": "2019-05-08T11:42:23.064+0000",
"status": 403,
"error": "Forbidden",
"message": "Access Denied",
"path": "/user/2"
}
Я бы предпочел решение, которое подходит и для других Erros, таких как 404. Какой самый простой способ достичь этой цели?