1

私はこの質問の内容を実験してきました(保護されたリソースを必要としないJSF/Java EEログイン)。

1 つのパブリック ページ (/public.xhtml) と 1 つの保護されたページ (/protected/private.xhtml) を使用して、BASIC 認証を使用してサンプル アプリケーションをセットアップし、最初のページから 2 番目のページへのリンクがあるとします (図のように)。以下)、すべてが完全に機能します。

<h:commandButton value="Go Private" action="/protected/private?faces-redirect=true" />


ただし、を削除しlogin-configて上記のボタンを次のように置き換えると:

<h:commandButton value="Go Private" action="#{mybean.login}" />


...そして #{mybean.login} は次のようになります...

public String login() {
    HttpServletRequest request = ...
    try {
        request.login("known username", "known password");
    } catch (Exception e) {
        // handle unknown credentials
    }
    return "/protected/private?faces-redirect=true";
}


この場合、ログインは成功しますが ( の例外ではありませんrequest.login())、ブラウザに「禁止されているリソース」ページが表示されます。


2 つのシナリオの違いを明らかにできる人はいますか?

4

2 に答える 2

0

HttpServletRequest#login()プログラムによるログインは、ベースのFORM認証構成でのみ機能します。を削除する<login-config>とデフォルトになるBASICため、は機能しlogin()ません。はlogin()基本的にセッションにユーザーを設定しますが、認証は基本的にセッションではなく HTTP 要求ヘッダーをBASICチェックします。Authenticate

それを<login-config>元に戻し、FORM利用したい場合はに設定しますlogin()

于 2012-12-05T11:17:28.030 に答える