如何在apache shiro中使用不同的未授权URL来处理不同的角色

时间:2014-12-10 03:42:35

标签: java jsf-2.2 shiro

我一直在尝试为shiro.ini文件的url部分为Web应用程序分配不同的未授权URL,但似乎我无法做到.Below是我尝试过的代码。

shiro.ini文件

[main]

    authc1 = org.apache.shiro.web.filter.authc.FormAuthenticationFilter
    authc2 = org.apache.shiro.web.filter.authc.FormAuthenticationFilter

    authc1.loginUrl = /login.xhtml
    authc2.loginUrl = /secLoginPage.xhtml 


[urls]
    /login.xhtml = authc1
    /secLoginPage.xhtml  = authc2
    /testapp/** = authc1, roles[admin,unauthorizedUrl=/adminAuthPage.xhtml]
    /userfld/**=authc2,roles[user,unauthorizedUrl=/abortPage.xhtml]
    /** = authc1
    /** = authc2

登录到应用程序后,它会重定向到授权页面,错误为Error 401: SRVE0295E: Error reported: 401

添加unauthorizedUrl=/adminAuthPage.xhtml后发生此错误。 如果代码中有任何错误,请建议。

2 个答案:

答案 0 :(得分:0)

我认为这不应该是这样做的,你基本上想要在角色中添加权限。

http://shiro.apache.org/web.html

/ testapp / ** = authc1,roles [admin,unauthorizedUrl = / adminAuthPage.xhtml]

应该是:

/ testapp / ** = authc1,角色[admin],烫发["管理员:"]

答案 1 :(得分:0)

如何制作一个单独的未经授权的页面,该页面就像现在在他的页面上的入口点重定向到所需的页面

403.jsp

<shiro:hasRole name="admin">
    <c:redirect url="adminAuthPage.xhtml"/>
</shiro:hasRole>

<shiro:hasRole name="user">
    <c:redirect url="abortPage.xhtml"/>
</shiro:hasRole>

或者更好,如果你只是想让管理员有另一页,那么

 <shiro:hasRole name="admin">
        <c:redirect url="adminAuthPage.xhtml"/>
 </shiro:hasRole>
<shiro:lacksRole name="admin">
    <c:redirect url="abortPage.xhtml"/>
</shiro:lacksRole>