0

これを私のweb.xmlに入れる:

<security-constraint>
        <display-name>Amministrazione</display-name>
        <web-resource-collection>
            <web-resource-name>wrcollAdmin</web-resource-name>
            <description/>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.htm</form-login-page>
            <form-error-page>/login.htm</form-error-page>
        </form-login-config>
    </login-config>

webapp の安全な領域を保護することができます。

たとえば、 /admin/page.htm にアクセスしようとすると、 /login.htm にリダイレクトされます。

次に、ユーザー名とパスワードの入力フィールドを持つ JSF2 フォームがあります。ログイン ボタンは、次のように、コントローラーで「login()」メソッドをトリガーします。

public void login() throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();
    ExternalContext externalContext = context.getExternalContext();
    // HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();

    logged = false;
    // request.login(username, password);

    if ( users.get(username)!= null && users.get(username).equals(password) ) {
        logged = true;
        externalContext.redirect("/admin/");
    } else {
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Failed","Error"));
     }
}

Java EE に次のように伝える方法がわからないため、これは明らかに機能していません。

API は request.login() をサポートしているだけだと思いますが、MemoryRealm や JDBCRealm などは使いたくありません... 他の方法でユーザーの有効性を判断します!

ユーザーをプログラムでログインする方法がない場合、最善の回避策は何ですか? おそらく、単一のユーザー名とパスワードの組み合わせでレルムを作成し、それらを常に request.login() に使用しますか?

4

1 に答える 1