從pages.xml
文件中刪除<rule if="#{!identity.loggedIn}">
。你需要做的僅僅是標記廣告頁面爲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
,通過重定向到以前保存的視圖中再次截獲並處理。如果沒有保存視圖(即用戶直接進入登錄頁面並且因此沒有觸發事件),則發生登錄操作的正常導航規則(用戶被帶到/user.xhtml
。
或者,您需要手動在您的導航規則中發出notLoggedIn
事件,但請記住,僅對導航規則進行評估AFTER發生操作,因此您需要在頁面描述符中添加<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)}" />...
感謝您的迴應。我添加了事件偵聽器到components.xml。但我也在pages.xml中定義了從登錄到用戶視圖的重定向: <重定向視圖-id =「/ user.xhtml」/> –
user1545274
我想知道這是否會導致問題?但是如果用戶選擇登錄選項,我需要重定向到用戶帳戶。 – user1545274