我正在使用 SEAM 2.2.2 (JBoss AS6),试图实现以下导航逻辑:
我有 3 种用户类型:用户、客户、管理员
对于每种类型,我都使用以下页面规则...
<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 页面
我想我需要以某种方式获取请求的页面作为 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有一个(不理想的)解决方案,如果有人可以描述一个更好的解决方案,请告诉我,否则我会使用这个一。