如何在Java EE 6中实现认证机制

时间:2010-06-04 09:00:55

标签: java security authentication java-ee java-ee-6

我正在尝试学习Java EE 6,我只是想知道如何在Java EE 6中实现认证机制。

以下是Java EE 6认证示例:

    public void login() {
    if (account.authenticate(name, password) == null) {
        message = "Invalid user name or password!";
    } else {
        message = " Login successful";
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
        try {
            request.login(this.name, this.password);
            Principal principal = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
            name = principal.getName();
        } catch (ServletException e) {
            // Handle unknown username/password in request.login().
            context.addMessage(null, new FacesMessage("Unknown login"));
        }
    }
}

我有以下问题:

  1. request.login函数如何检查名称和密码?它不知道用户实体吗?
  2. 如果不是正确的方法。如何实现标准认证机制
  3. 最后,谢谢你的建议,我需要一个非常好的教程或建议。

1 个答案:

答案 0 :(得分:15)

  

request.login函数如何检查名称和密码?它不知道用户实体吗?

request.login允许实现编程安全性,验证为ServletContext配置的Web容器登录机制使用的密码验证领域中提供的用户名和密码

换句话说,它将身份验证检查委托给容器,并且此检查是针对webapp的安全领域完成的。这是基于FORM的身份验证的非常好的替代方案。

Authentication Without the Form 有一个很好的screencast显示此功能。如果您不想使用文件领域而是使用JDBC领域,请选中this blog post

另见