JSF 2.0 управлять пользователем - PullRequest
2 голосов
/ 18 февраля 2012

Я прихожу на Java из Rails и PHP, поэтому мои мысли здесь могут быть испорчены. Я хотел бы реализовать систему входа в систему, аналогичную той, которую я делал в других моих системах (я понимаю, что вы можете управлять входом в систему и т. Д., Используя встроенные свойства Java EE, я просто хочу понять, как я могу сделать это вручную и делиться объектами между бобы.)

С помощью rails или php легко поддерживать переменную сеанса, которая содержит идентификатор пользователя, вошедшего в систему. Затем глобальная переменная в PHP или свойство applicationController в rails могут быть предварительно загружены с помощью пользовательского объекта, что делает его доступным на всех контроллерах / страницах. Таким образом, зарегистрированный статус пользователя и другие параметры легко доступны для всех страниц / контроллеров.

Я не знаю, как сделать подобное с помощью JSF.

Я знаю, как построить объект пользователя с использованием JPA, а затем создать управляемый компонент с областью сеанса, которая содержит ссылку на объект пользователя после входа в систему с помощью метода loggin из формы входа. Эту часть я понимаю:

@ManagedBean
@SessionScope
public class LogginController {

// inject persistence context, or use EJB to do actual loading etc
private User currentUser;     //JPA Entity

void loginAction() {
  // action from login form
  // authenticates user and loads user object into currentUser property

Где я застреваю, если управляемый компонент, содержащий свойство currentUser, имеет область действия сеанса, как мне получить доступ к этому свойству в других управляемых компонентах, чтобы получить текущего пользователя? Кажется, что управляемые бины существуют изолированно друг от друга.

Допустим ли следующий код?

@ManagedBean
public class SomeOtherBean {

@ManagedProperty
LoginController loginController;

public void someOtherMethod() {
User myUser = loginController.getCurrentUser();
   //
   // etc

Должен ли класс, которому вводится компонент, также иметь SessionScope? Является ли это неправильным подходом, нужно ли мне вручную устанавливать сеанс, используя базовый ServletContext, чтобы пользователь был доступен в других bean-компонентах (т. Е. Сохранить идентификатор зарегистрированного пользователя в сеансе, а затем перезагрузить пользователя после доступа к пользователю переменная сеанса id в разных бинах)?

Я все об этом говорю неправильно? Есть ли более простой способ, которого мне не хватает.

1 Ответ

1 голос
/ 18 февраля 2012

Допустим ли следующий код?

Да (при условии, что это псевдо; в реальном коде это должно быть свойство private, и вы должны указать значение управляемого свойства, например, @ManagedProperty("#{loginController}") и предоставить хотя бы метод установки).


Должен ли класс, которому вводится боб, также иметь SessionScope?

Не обязательно. Это может быть запрос или просмотр объекта, но не приложения (это приведет к исключению). По крайней мере, вы должны быть очень осторожны с выбором объема бобов. Не выбирайте слишком широкую область для данных, которые он содержит. См. Также Как правильно выбрать область применения бобов? .

...