0

我有按钮可以将我切换到广告的详细信息。但要查看广告用户的详细信息,需要登录。所以在 pages.xml 我定义了重定向到登录页面:

<rule if="#{!identity.loggedIn}">
  <redirect view-id="/login.xhtml" />
</rule>

我不知道如何在登录后将用户重定向到广告详细信息?

当用户未登录时,他将从“.../app/advert/3”切换到“.../app/user”。而且我不知道如何将用户重定向到广告的详细信息。我正在丢失有关广告 ID 的信息。我试图在 pages.xml 中定义参数:

<page login-required="false" view-id="/advert/*">
  <rewrite pattern="/advert/{advertId}" />
  <param name="advertId" value="#{contextUser.setadvertId(advertId)}" />...

但没有设置 advertId。任何想法?

4

2 回答 2

0

这是最简单的方法。

http://docs.jboss.org/seam/2.3.1.Final/reference/html/security.html#d0e8902

于 2013-10-14T19:34:28.300 回答
0

<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)}" />...
于 2013-10-17T13:56:34.193 回答