Я использую Spring Data Rest для публикации репозитория. Я использую @PreAuthorize
и @PostFilter
, чтобы ограничить доступ к конечным точкам REST исключительно пользователям-администраторам и фильтровать результаты.Обеспечение исключительно доступа REST к хранилищу данных Spring Data
@PreAuthorize("hasRole('ROLE_ADMIN')")
@PostFilter("hasPermission(filterObject, 'read')
public interface SomeRepository extends CrudRepository<SomeEntity, Long> {
}
В то же время у меня есть другой контроллер, который не требует никакой аутентификации, но использует репозиторий.
@Controller
public class SomeController {
@Autowired
SomeRepository repository;
@RequestMapping(value = "/test")
public ResponseEntity test() {
// Do something
repository.findAll();
// Do something else
}
}
Это не работает, так как пользователь, отправить запрос на «/ тест» не админ, так что не имеет доступа к хранилищу.
Вопрос в том, можно ли добавить защиту исключительно в REST-интерфейс репозитория, а не когда репозиторий используется внутри приложения?
Thanks
Хранилища конечные точки разоблачают автоматически Spring Data Rest, они не имеют какой-либо контроллер, куда поместить аннотацию. Это решение будет работать для моих пользовательских контроллеров, и я уже использую его. Проблема связана с конечной точкой, открытой хранилищем. Как ограничить эти конечные точки, не ограничивая доступ к репозиторию из других классов. Спасибо – Gerardo
@ Gerardo ok, теперь у меня есть ваш вопрос. Извините, я пропустил эту фундаментальную деталь :-) Честно говоря, никогда не использовал Spring Data Rest самостоятельно. Я считаю, что обработчики событий Spring Data REST сделаны для вашей цели. Посмотрите здесь https://jaxenter.com/rest-api-spring-java-8-112289.html –