2

私はJavaWebページ環境にまったく慣れていません。最近、Javaを使ってE-Businessプラットフォームを開発しようとしています。

したがって、認証ツールとしてj_security_checkForm-Basedを使用しています。認証が完了した後、希望のページにリダイレクトすることに成功しました。

ただし、エンドユーザーの設定とデータベース(MS SQL 2005)からの情報をロードする必要があるため、認証が完了してからページをリダイレクトする前に、すべての情報をロードする必要があります。

Primefacesを使用していくつかのメソッドを試しましたが、ユーザー情報をロードするBeanメソッドをトリガーできませんでした。

私が試した方法の1つは、oncompleteを使用してBeanメソッドをトリガーすることです。

<h:form id="login" prependId="false"
                    onsubmit="document.getElementById('login').action='j_security_check';">
                    <h:panelGrid columns="2" cellpadding="5">  
                        <h:outputLabel for="j_username" value="Username:" />
                        <p:inputText value="#{loginBean.username}"   
                                     id="j_username" required="true" label="j_username" />
                        <h:outputLabel for="j_password" value="Password:" />  
                        <h:inputSecret value="#{loginBean.password}"   
                                       id="j_password" required="true" label="j_password" />
                        <f:facet name="footer">  
                            <p:commandButton id="loginButton" value="Login" type="submit" ajax="false"                                                 
                                              oncomplete="#{loginBean.login()}"/>
                        </f:facet>  
                    </h:panelGrid>
                </h:form>

私はまた、oncompleteをonclickなどに変更するだけのこれに似たものを試しました。最終的には実行可能な方法がありません。

ですから、この問題をどうやって克服すればいいのか、どなたでもアドバイスをいただければ幸いです。

百万ありがとう、

4

1 に答える 1

3

これにはいくつかの解決策があります。

  1. Userリモートユーザーとセッション内のエンティティの存在をチェックするサーブレットフィルタを作成します。リモートユーザーがではなくnullUserエンティティがそうである場合は、DBからロードして、セッションに設定します。これはここで具体的に答えられます:JavaEEフォーム認証でログインした後のユーザー詳細へのアクセス

  2. Userエンティティを返す必要があるセッションスコープのBeanのゲッターで遅延読み込みを実行します。これは、この回答の最初の部分で具体的に回答されています。j_security_checkを使用してJava EE/JSFでユーザー認証を実行する

  3. 実際のJSFBeanアクションメソッドを使用してプログラムによるログインを実行し、Userエンティティを直接取得します。これは、この回答の2番目の部分で具体的に回答されています。j_security_checkを使用してJava EE/JSFでユーザー認証を実行する


具体<form action="j_security_check" method="post">的な問題とは関係なく、の代わりにを使用する必要があります<h:form prependId="false">。そうすれば、フォームのアクションを変更するために、その厄介なJSハックも必要ありません。

于 2013-02-22T12:49:58.110 に答える