Я прихожу на 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 в разных бинах)?
Я все об этом говорю неправильно? Есть ли более простой способ, которого мне не хватает.