Задать вопрос
Vityarik
@Vityarik

Как контролировать доступ пользователей к REST ресурсам?

В Java EE приложении есть пользователи (user) каждый пользователь может создавать документы (Document)

Доступ к документам осуществляется через JAX-RS.

Перед тем как пользователь получит доступ к документам ему надо войти в систему, после чего он может делать запросы вида example.com/documents и example.com/document/15 он должен получать доступ только к своим документам и ошибку если пытается получить/удалить/изменить чужой документ.

Как организовать вход в систему пользователей и проверку принадлежности документа пользователю при удалении/обновлении документов?
  • Вопрос задан
  • 2882 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@midikko
Java-ee + Android разработчик
обычно такие вещи делаются с помощью токенов. т.е. при первом запросе клиент идентифицируется в системе и получает уникальный токен ( число\строка\хеш ) и все последующие сообщения уже отправляет с этим токеном и на его основе определяются его права и возможности.

если есть возможность, я бы глянул в сторону spring-ws и spring-security. они более или менее успешно пытаются предоставить для всего этого удобное апи. и работают почти из коробки. но я сомневаюсь в целесообразности.
Ответ написан
@jkotkot
режим сарказма
Spring security access control list например
docs.spring.io/spring-security/site/docs/3.0.x/ref...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@jumb0jet
Например ты можешь создать поле createdBy или owner, в котором будешь хранить пользователя который создал документ. И при попытке доступа к чужому документу возвращать статус 403.
Для того чтобы передавать данные о пользователе ты можешь использовать либо cookie либо в каждом запросе передавать username/password.
Ответ написан
Вход пользователей в систему стоит делать через готовый фреймворк. Я использую Apache Shiro. Писать что-то своё для авторизации точно не стоит.

Проверку принадлежности документа пользователю можно сделать через идентификатор пользователя (PK в базе, например): при создании документа идентификатор пользователя записываете в документ, а при изменении/удалении документа сравниваете идентификатор текущего пользователя и идентификатор пользователя, сохранённый в документе. При использовании Shiro получить текущего пользователя не проблема.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы