Защита данных для пружинного отдыха - PullRequest
0 голосов
/ 13 февраля 2020

Я использую Spring Data Rest для представления репозиториев JPA нашему клиентскому приложению React. И я также использую Spring Security и JWT для защиты REST API.

Например, у нас есть Entity и Repository, как показано ниже:

@Entity
@Table(name = "customer")
public class Customer {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;
  ....
}

public interface CustomerRepository extends PagingAndSortingRepository<Customer, Long> {
}

Spring Data Rest предоставит CustomerRepository конечной точке REST /api/customers Таким образом, наше приложение React может вызывать конечные точки REST для получения данных. Это работает хорошо.

Однако кто-то с действительным токеном JWT может использовать такие инструменты, как Postman, для получения всех данных клиентов с серверов. Конечно, мы не хотим, чтобы это произошло.

Мои вопросы:

  • Как мы можем предотвратить такое ненормальное использование?
  • Как лучше всего использовать Spring Data Rest?

1 Ответ

0 голосов
/ 13 февраля 2020

Ваше приложение предоставляет REST API с помощью Spring Data REST. Одна из ваших сущностей - это сущность Customer, которая раскрывается через CustomerRepository. Запрашивая список всех сущностей, вызывая /api/customers, вы хотите, чтобы в списке отображались только те сущности Customer, которые у субъекта запросов имеет разрешение на просмотр.

Это можно сделать, пометив соответствующий метод с помощью @PreFilter или @PostFilter как объяснено в справочной документации Spring Security . Вам нужно указать какое-то условие.

Пример:

@PostFilter(hasPermission(filterObject, 'read'))
public List<Customer> findAll();

Помните, что @PostFilter выполняет итерацию возвращаемого значения, что может занять некоторое время, в зависимости от размера возвращенный список.

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