如何在应用程序上使用新用户登录创建新会话?

时间:2011-03-31 19:37:38

标签: jsf session jsf-2

新用户登录应用程序后,如何在JSF 2.0中创建新会话?

1 个答案:

答案 0 :(得分:8)

你不需要。它使设计良好的webapps毫无意义。 servletcontainer已经完成了会话管理。只需将登录用户放在会话范围内即可。

@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}其他bean中以@ManagedProperty的形式提供。

然而,在注销时,使会话无效更有意义。这将废弃所有会话范围的bean。您可以使用ExternalContext#invalidateSession()

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

另见: