Я занят работой над проектом, которому нужен REST API, чтобы пользователи могли получать доступ к своей информации на сервере. У меня есть система, работающая с использованием Spring MVC и MappingJacksonJsonView
для возврата JSON, где это необходимо.
Теперь я хочу включить безопасность в систему, чтобы, во-первых, убедиться, что пользователи аутентифицируют себя и имеют правильные разрешения для доступа к ресурсу, а во-вторых, я хочу иметь достаточно детальный контроль над данными, чтобы убедиться, что пользователь может получить доступ только к общедоступным части ресурса или, если у них есть правильные разрешения, весь ресурс.
Так, например:
Сценарий А. Пользователь А хочет получить доступ к своему списку сообщений, а также к своему имени и номеру телефона. Затем они будут аутентифицированы, и их разрешения позволят им получить доступ ко всей их собственной информации.
Сценарий Б. Пользователь А хочет получить доступ к номеру телефона пользователя Б, поэтому исключает список сообщений пользователя Б в ответе, поскольку у А нет разрешений на доступ к этой части информации.
- Вопрос 1. Есть ли удобный способ сделать это с помощью Apache Shiro и Spring MVC?
- Вопрос 2. Есть ли у кого-нибудь пример или ссылка на руководство о том, как это удалось сделать?
- Вопрос 3. Какая схема разрешений с использованием Широ будет наиболее эффективной для такого детального контроля?
Я раньше не работал с Широ, но, судя по примерам и чтению документации, это возможно, и Широ лучше всего подходит для решения. Я открыт для других решений, хотя.
Редактировать: Одно решение, и я понятия не имею, возможно ли это с Широ и Джексоном, состоит в том, чтобы аннотировать свойства в моих POJO, которые я могу пометить как общедоступные или частные. Или, что еще лучше, отметьте их разрешением, необходимым для доступа к ним. Затем, когда Джексон распечатывает JSON-представление объекта, он может проверить разрешения для текущего свойства и решить, следует ли печатать свойство или нет, из его аннотации.