<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)}" />...