Spring Security + пользовательский объект User, прикрепленный к сессии для отфильтрованных запросов - PullRequest
2 голосов
/ 02 февраля 2011

Я не уверен, как решить следующую проблему / реализовать мой сценарий. Может быть, кто-нибудь может дать мне несколько советов?

  1. У меня есть приложение Spring MVC с Spring Security. Я также использую пользовательскую страницу входа. Пока все работает нормально, я могу аутентифицироваться и отображать вошедшего в систему пользователя на моем JSP, используя следующий код.

    <sec:authorize ifAnyGranted="ROLE_USER">

    Logged in as <sec:authentication property="principal.username" />

    </sec:authorize>

  2. Пользователи восстановлены из базы данных прямо сейчас. Код для этого в XML:

    <jdbc-user-service data-source-ref="dataSource" users-by-username-query="SELECT username, password , '1' AS enabled FROM users WHERE username = ?" authorities-by-username-query="SELECT username, 'ROLE_USER' FROM users WHERE username = ?" />

Все отлично работает. Проблема в том, что на самом деле у меня есть пользовательский класс User, который я хотел бы использовать и, вероятно, сохранить в своем сеансе, поскольку последующие запросы к БД должны фильтровать результаты в соответствии с зарегистрированным в User.id.

Как бы я это сделал?

  • Что мне нужно сделать, чтобы сохранить мой объект User в моем сеансе? Это правильный способ сделать это?
  • Я использую Hibernate. Что такое Лучшая практика для фильтрации запросов, например для объектов с именем «Задача» (в диспетчере задач), в соответствии с зарегистрированным пользователем? (У меня есть столбец и свойство user_id в таблице задач в моей базе данных MySQL)

Любая помощь или подсказка очень ценится. Просто нужно какое-то направление: -)

1 Ответ

2 голосов
/ 02 февраля 2011

Если вы используете Spring Security 3.x, вы можете проверить, соответствует ли Контроль доступа на основе выражений (например, @PostFilter) вашим требованиям.

Например, если ваши Task объекты имеют член username, вы можете сделать что-то вроде этого ...

   @PostFilter("filterObject.username == authentication.name")
   public List<Task> getTasks() {
        ...
        tasks = TaskDao.findAll();
        return tasks;
    }

Это вернет те задачи, которые принадлежали вошедшему в систему пользователю.

Это ТАКОЕ обсуждение также возможно уместно.

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