<rule if="#{!identity.loggedIn}">
ファイルから を削除しpages.xml
ます。あなたがする必要があるのは、login-required="true"
代わりに広告ページをマークするだけです:
<page login-required="true" view-id="/advert/*">
<rewrite pattern="/advert/{advertId}" />
<param name="advertId" value="#{contextUser.setadvertId(advertId)}" />...
ページが としてマークlogin-required="true"
され、認証されていないユーザーによってアクセスされると、Seam は自動的にorg.jboss.seam.security.notLoggedIn
イベントを発行し、 で定義されたビューにリダイレクトしlogin-view-id
ます。定義したイベント リスナーは、このイベントをインターセプトし、現在のビューとパラメーターを保存します。
認証が正常に完了すると、Seam は を発行しorg.jboss.seam.security.loginSuccessful
ます。これは再びインターセプトされ、以前に保存されたビューにリダイレクトすることによって処理されます。ビューが保存されていない場合 (つまり、ユーザーが直接ログイン ページに移動したため、notLoggedIn
イベントが発生しなかった場合)、ログイン アクションの通常のナビゲーション ルールが実行されます (ユーザーは/user.xhtml
.
または、ナビゲーション ルールで手動でイベントを発行する必要がありますが、ナビゲーション ルールはアクションが発生しnotLoggedIn
た後にのみ評価されることに注意してください。そのため、ページ記述子に要素を追加してルールの評価をトリガーする必要があります。これ:<action/>
<page login-required="false" view-id="/advert/*">
<action execute="#{...}" /> <!-- execute any action to trigger rule evaluation -->
<navigation>
<rule if="#{not identity.loggedIn}">
<!-- raise the event to trigger the capture of the current view -->
<raise-event type="org.jboss.seam.security.notLoggedIn" />
<redirect view-id="/login.xhtml" />
</rule>
</navigation>
<rewrite pattern="/advert/{advertId}" />
<param name="advertId" value="#{contextUser.setadvertId(advertId)}" />...