Безопасный способ хранения данных весной - PullRequest
0 голосов
/ 04 марта 2020

В настоящее время я разрабатываю сервер REST API на основе Spring Boot. Благодаря Spring Data Rest объекты 10-i sh могут легко иметь свой собственный контроллер через простой репозиторий (@RepositoryRestResource плюс JpaRepository и JpaSpecificationExecutor). Теперь мне нужно интегрировать управление безопасностью с @PreAuthorize.

. Вопрос здесь в том, каким методом я должен добавить аннотацию для ограничения GET / POST / et c. ?

Например, если я ограничиваю разрешение delete, это так же влияет на deleteById, deleteInBatch, deleteAll? В документации я вижу, что аннотации экспортируемых данных помещаются на deleteById и delete без каких-либо дополнительных пояснений, что меня смущает.

1 Ответ

1 голос
/ 05 марта 2020

Например, если я ограничиваю разрешение на удаление, это также влияет на deleteById, deleteInBatch, deleteAll?

Насколько я знаю: нет. Проверьте этот пример кода, где поиск разрешен, но удаление строго ограничено только администраторами:

public interface RecordRepository<T extends Record> extends MongoRepository<T, String> {

    // paginated queries
    @RestResource(path = "names", rel = "name")
    public Page<T> findByName(@Param("name") String name, Pageable pageable);
    @RestResource(path = "types", rel = "types")
    public Page<T> findByTypeIn(@Param("type") List<String> types, Pageable pageable);

    // restrict delete operations to administrators only

    @PreAuthorize("hasRole('ADMIN')")
    @Override
    void deleteById(String id);

    @PreAuthorize("hasRole('ADMIN')")
    @Override
    void delete(T entity);

    @PreAuthorize("hasRole('ADMIN')")
    @Override
    void deleteAll(Iterable<? extends T> records);

    @PreAuthorize("hasRole('ADMIN')")
    @Override
    void deleteAll();
}

При этом, если ваша цель состоит в том, чтобы ограничить удаление только администраторами, вы можете расширить WebSecurityConfigurerAdapter и настройте его для блокировки всех запросов http DELETE:

public class WebSecurityBaseConfiguration extends WebSecurityConfigurerAdapter {
    ...

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
          .antMatchers(HttpMethod.DELETE).hasRole("ADMIN");
    }

}

Обратите внимание, что это быстрое и грязное копирование, которое может не работать из коробки (вам, вероятно, потребуется настроить Ролевая иерархия ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...