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

Raj*_*pta 7 session jsf jsf-2

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

Bal*_*usC 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";
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

登录用户将#{user}在整个同一会话的所有页面中@ManagedProperty以及其他bean中可用.

但是,在注销时,使会话无效更有意义.这将废弃所有会话范围的bean.你可以用ExternalContext#invalidateSession()它.

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

也可以看看: