我正在使用SEAM 2.2.2 (JBoss AS6),试图实现以下导航逻辑:
我有3个用户类型:user, client, admin
对于每种类型,我使用以下页面规则…
<page login-required="true" view-id="/admin/*">
<restrict>#{s:hasRole('admin')}</restrict>
<navigation from-action="#{identity.logout}">
<end-conversation/>
<redirect view-id="/admin-login"/>
</navigation>
</page>
在用户注销时将用户转发到登录页面
和
<exception class="org.jboss.seam.security.NotLoggedInException" log="false">
<redirect view-id="/index.xhtml"/>
</exception>
<exception class="org.jboss.seam.security.AuthorizationException" log="false">
<end-conversation/>
<redirect view-id="/index.xhtml"/>
</exception>
显示未登录的用户。但是,与其将它们重定向到索引页,不如将它们重定向到各自的登录页,例如,如果我试图访问/admin/somePage.xhtml而不登录,我将被重定向到/admin-login page
我想我需要以某种方式获得所请求的页面作为pages.xml中的参数,但是通过查看文档我看不到任何
如下所示(举个例子)…
<exception class="org.jboss.seam.security.NotLoggedInException" log="false">
<rule if="#{requestedPage}='/admin/*'">
<redirect view-id="/admin-login"/>
</rule>
</exception>
更新:我也试过下面的
<page login-required="true" view-id="/admin/*">
<restrict>#{s:hasRole('admin')}</restrict>
<rule if="#{!s:hasRole('admin')}">
<redirect view-id="/admin-login"/>
</rule>
<navigation from-action="#{identity.logout}">
<end-conversation/>
<redirect view-id="/admin-login"/>
</navigation>
</page>
但是org.jboss.seam.security.NotLoggedInException会覆盖它并转发到index.xhtml。
经过更多的谷歌搜索,我在这里发现了同样的问题:https://community.jboss.org/thread/191214有一个(不理想的)解决方案,如果有人能描述一个更好的,请让我知道,否则我将使用这个
Ok,我在这里发现了同样的问题https://community.jboss.org/thread/191214,并使用了在线程结束时提供的解决方案,似乎工作得很好。