2013-08-27 3 views
0

Я бы хотел, чтобы мой прикладной уровень знал, какой пользователь зарегистрирован, чтобы упростить подписи методов - например, метод (owner, object) будет просто методом (объектом). Я использую Spring Security для обеспечения безопасности, хотя хотел бы оставить Spring из моего прикладного уровня, поэтому для этой цели есть отдельный слой (и преобразование DTO) - как фасад (адаптер для приложений).Функциональность сеанса в прикладном уровне?

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

ответ

1

Вы должны были бы зарегистрировать Filter или HandlerInterceptor, что бы посмотреть на HttpSession и, если пользователь вошел в систему, хранить какие-то User представления в некотором staticThreadLocal контексте. Любой класс может иметь доступ к этому статическому ThreadLocal, содержащему ваш объект User.

Вам нужно будет удалить этот объект, когда пользователь выйдет из системы или завершится сеанс. Подсказка: HttpSessionListener.

+0

Вы имеете в виду что-то вроде [this] (https://wiki.openclinica.com/doku.php?id=developerwiki:interceptor)? – kboom

+0

@Kboom Похожие. Однако с этим решением вам придется проходить объекты «HttpServletRequest» или «HttpSession». Вместо этого вы должны зарегистрировать их в 'static ThreadLocal', который затем вы можете получить из любого класса, если вы находитесь в одном и том же« Thread ». [Это может помочь] (http://stackoverflow.com/questions/2784009/why-should-java-threadlocal-variables-be-static). –

+0

Или, может быть, было бы намного проще связать SecurityContextHolder.getContext() с этим потоком локальным? Если я ошибаюсь, верьте мне, пожалуйста. Я ищу простейшее решение :). – kboom

Смежные вопросы