1

实际上我是 JSF 和 Facelets 和企业应用程序的新手,尽管我在过去 4 个月一直在研究它,无论如何,我正在开发一个具有登录、用户管理员和文档管理员的网页(它有更多但没关系),我必须根据每个用户的权限来管理页面的访问和内容。阅读有关安全性的内容后,我发现了许多登录方法,但我使用 Stateful Beans 制作了自己的方法,以便在应用程序中维护用户数据以供以后使用,这样我就可以限制内容。问题是......这是根据用户限制管理内容的正确方法吗?如果没有,哪种方法是最好和最安全的?

这是我的 Stateful Bean(我没有包括 Getter 和 Setter)

    @ManagedBean
    @Stateful
    public class HandlerLogin implements Serializable{

    @EJB
    private LoginMethodsLocal loginMethods;

    private String loginNickname;
    private String loginPassword;
    private String userData[];
    //[0]=Nickname
    //[1]=Name
    //[2]=User Type

    private boolean loguedIn= false;

    public void check(){

    System.out.println(this.loginNombre);
    System.out.println(this.loginContrasena);

    this.userData= loginMethods.Login(this.loginNickname, this.loginPassword);
    //the method loginMethods.Login() queries in the database looking for
    //"this.loginNickname" and "this.loginPassword"

    if (this.userData!=null){

        this.loguedIn=true;

    }
    else{

        this.loguedIn= false;
        FacesContext.getCurrentInstance().addMessage("mensajesLogin", new FacesMessage("Error, User Does not Exist"));
    }
}

public void closeSession(){

    this.userData=null;
} 
}

所以我管理内容和导航的逻辑是检查什么样的用户,并根据它确定访问和渲染的方式

4

1 回答 1

1

@Stateful注释在 JSF中没有任何@ManagedBean作用。只有当类本身被注入@EJB另一个托管 bean 或 EJB 中时,才会真正使用该注释,即便如此,将创建和使用所有属性设置为默认值的全新且完全不同的实例。所以@Stateful注释绝对不会像你认为的那样做。删除它,在这种情况下没有任何意义。

剩下的代码是否正确,取决于具体的功能需求。有许多同样好的和安全的方法(假设您了解您实际编写的代码)。问题更多:你想重新发明多少轮子?内置容器管理的身份验证为细粒度控制留下了很小的空间,但如果它对您来说足够了,那么只需使用它而不是自己自制身份验证。

浏览以下相关答案应该会给出一些好主意:

于 2012-11-08T15:45:19.357 回答