1

実は、過去4か月間取り組んできたにもかかわらず、JSF、Facelets、エンタープライズアプリは初めてです。とにかく、ログイン、ユーザー管理者、ドキュメント管理者がいるWebページを開発しています(しかし、それは問題ではありません)そして私は各ユーザーの許可に従ってアクセスとページのコンテンツを管理する必要があります。セキュリティについて読んで、ログインを行う多くの方法を見つけましたが、後で使用するためにアプリケーションでユーザーデータを維持し、コンテンツを制限できるようにするために、ステートフルBeanを使用して独自に作成しました。問題は...これはユーザーの制限に従ってコンテンツを管理する正しい方法ですか?そうでない場合、それを行うための最良かつ最も安全な方法はどれですか?

これは私のステートフルビーンです(私はゲッターとセッターを含めませんでした)

    @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 に答える