Лучший способ показать полное имя пользователя в заголовочном файле JSP с помощью инфраструктуры Spring / Struts? - PullRequest
3 голосов
/ 12 мая 2009

У меня есть приложение JSP Struts, которое использует Spring для интеграции с сервисами / dao / database. По сути, Struts использует Spring для получения данных из БД, он строит форму и передает их в файлы JSP.

У меня есть заголовочный файл, который вставляется в каждый файл JSP с использованием Tiles. Я хотел бы показать «Добро пожаловать, Джон Доу» на каждой странице внутри заголовка. Где «Джон Доу» - это имя зарегистрированного пользователя.

Каков наилучший подход для этого? Решение, которое я могу придумать:

  1. Использовать Spring Filter для перехвата http-запроса. Загрузите пользователя из базы данных, используя cookie, который содержит идентификатор пользователя (*) и поместите имя в сессионный компонент с именем «CurrentUser»

  2. В "header.jsp" получите контекст приложения Spring. Используя его, загрузите bean-компонент «CurrentUser» и получите имя. Введите название в HTML.

Я думаю, я мог бы заставить это работать. Но я не уверен, что это лучший способ сделать это. Есть мысли о моем подходе?


(*) Конечно, куки будут зашифрованы

Ответы [ 2 ]

1 голос
/ 13 мая 2009

Хотя может быть чрезвычайно большим молотком для вашего довольно простого варианта использования, мы получили действительно аккуратную интеграцию spring-jsp (требуется jsp 2.1!) С помощью ELResolver, Следуя этому руководству , вы можете в принципе внедрить любой bean-компонент, управляемый пружиной, в свой el-контекст и разрешить доступ к нему с помощью jsp-el, например:

$ {spring.mybean.myproperty}

Вы можете добавить заранее заданные bean-компоненты в ваш el-context или просто передать «mybean» в getBean и разрешить доступ ко всему, что Spring удалось сделать из jsp. mybean может легко стать бобом весенней сессии.

Я не совсем уверен, как это будет совмещаться с плитками.

0 голосов
/ 12 мая 2009

Вы еще не храните какой-то объект User в сеансе?

Если это так, я бы просто добавил метод "getFullName ()" к этому объекту домена и дал бы DAO заполнить его, когда он вернет его. В идеале вы должны заполнять объект User при входе пользователя в систему, сохранять его в сеансе, и не нужно снова загружать все данные пользователя из базы данных при каждом запросе страницы.

(Вы не используете Spring Security? Если это так, они предоставляют довольно простой способ хранения UserDetails -подобного объекта в Session и легкий доступ к нему.)

Я бы проголосовал против обоих ваших подходов, потому что

  1. Это означает (как минимум) дополнительный вызов базы данных за запрос страницы
  2. Это не будет работать, если другие пользователи будут использовать один и тот же компонент в том же контексте. Кроме того, у вас действительно не должно быть файлов JSP (которые являются вашим уровнем представления данных), напрямую взаимодействующих со службами данных.
...