Как я могу создать новый сеанс с новым логином пользователя в приложении? - PullRequest
7 голосов
/ 31 марта 2011

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

1 Ответ

8 голосов
/ 31 марта 2011

Вам не нужно.Это делает в хорошо разработанных веб-приложениях никакого смысла.Сервлет-контейнер уже управляет сессией.Просто поместите зарегистрированного пользователя в область сеанса.

@ManagedBean
@RequestScoped
public class LoginController {

    private String username;
    private String password;

    @EJB
    private UserService userService;

    public String login() {
        User user = userService.find(username, password);
        FacesContext context = FacesContext.getCurrentInstance();

        if (user == null) {
            context.addMessage(null, new FacesMessage("Unknown login, try again"));
            username = null;
            password = null;
            return null;
        } else {
            context.getExternalContext().getSessionMap().put("user", user);
            return "userhome?faces-redirect=true";
        }
    }

    public String logout() {
        FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
        return "index?faces-redirect=true";
    }

    // ...
}

Зарегистрированный пользователь будет доступен как #{user} на всех страницах в течение того же сеанса, а также в @ManagedProperty других bean-компонентов.

Однако при выходе из системы имеет больше смысла аннулировать сеанс.Это также уничтожит все bean-объекты сессионной области.Для этого вы можете использовать ExternalContext#invalidateSession().

    public String logout() {
        FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
        return "index?faces-redirect=true";
    }

См. Также:

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