0

J2EE 6の標準チュートリアルでは、ユーザー認証の処理を次のように示しています。

<form method="POST" action="j_security_check">
    <table cellpadding="0" cellspacing="0" border="0">
         <tr>
            <td align="right">Username:&nbsp;</td>
            <td>
                <input type="text" name="j_username">
             </td>
         </tr>
         <tr>
             <td align="right">Password:&nbsp;</td>
             <td>
                <input type="password" name="j_password">
             </td>
         </tr>
         <tr>
             <td></td>
             <td>
                 <input type="submit" value="Login">
             </td>
        </tr>
    </table>
</form>

このアプローチでは、特別なフィールド「j_username」と「j_password」を持つ特別なコンテナ関数「j_security_check」を使用します。

*これはJSF2.0で実行できますか?
*認証が成功した後、j_username / j_passwordフィールドは使用できますか?より正確には、認証後にユーザーを識別するにはどうすればよいですか?

単純なサンプルコードスニペットをいただければ幸いです。

4

2 に答える 2

2

これは JSF 2.0 で可能でしょうか?

はい。結局のところ、これは単なる HTML の集まりであり、認証を行うのはコンテナーであり、JSF 自体ではありません。代替手段は、 によるプログラムによるログインHttpServletRequest#login()です。これにより、JSF ベースの検証、ajax の空想、およびすべてを em で備えた完全な JSF フォームを使用できます。キックオフの例については、この回答も参照してください: JSF はフォームベースのセキュリティをサポートしていますか?


認証が成功した後、j_username/j_password フィールドを使用できますか? より正確には、認証後にユーザーを識別するにはどうすればよいですか?

ユーザー名のみが JSF コンテキスト内にあり、 によって使用可能でExternalContext#getRemoteUser()あり、ビュー内にあります#{request.remoteUser}。明らかなセキュリティ上の理由から、パスワードは使用できません。

于 2012-06-07T04:28:26.577 に答える
1
  1. かなり前に、私は春のセキュリティでjsf(1.2)ログインページを達成しようとしました。しかし、私は成功しなかったので、私はついに諦め、あなたが上でそれをしているように「通常の」jspでそれをしました。

  2. 現在のSessionContextをEJBに挿入することで、現在のユーザーを識別できます。

    @Resource
    SessionContext sessionContext;
    public void doSth() {
        log.info("The current user's name is: " 
           + sessionContext.getCallerPrincipal().getName() );
    }
    

    HttpServletRequestでも同じことができます。

    request.getUserPrincipal();
    

    またはFacesContextから:

    FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
    
于 2012-06-06T06:34:36.143 に答える