На весенней стороне это работает следующим образом:
У вас есть две конечные точки для входа и регистрации для создания учетной записи, которые общедоступен.
Остальные защищены мультиарендной системой. Сначала он проверяет, проверен ли ваш JWT и правильно ли он подписан. Затем система проверяет, в каком арендаторе зарегистрирован этот идентификатор пользователя, используя TenantContext (который представляет собой компонент области запроса, который показывает текущие tenantId и tenantName). С этого момента система должна быть на 100% уверена, что любой доступ базы данных к строкам, которые не принадлежат данному арендатору, невозможен.
Конечно, очень простой ответ — просто добавить byTenantId к каждой отдельной функции в каждом единый репозиторий. Но мне как бы нужно пуленепробиваемое решение. Тот, который гарантирует, что даже в случае программной ошибки система предотвратит доступ к неавторизованной строке.
Вот несколько идей, которые у меня возникли и почему я не думаю, что они сработаютСоздать новую базу данных, новую базу данных и пользователя базы данных для каждого клиента
- Выключить спящий режим JPA
- Кошмар миграции
- Требуется одновременное открытие 10 000 подключений ко всем базам данных с разными пользователями
- Проблемы, аналогичные описанным выше
- Безопасность на уровне строк не поддерживается JPA
- Также требуется 10 000 подключений для каждого пользователя БД
- li>
- Очень сложно реализовать
- Ключ потерян клиентом, данные пропали
- Объединения по-прежнему будут доступны
Подробнее здесь: https://stackoverflow.com/questions/792 ... m-with-spr