2013-05-05 179 views
4

角色admin的授權被拒絕訪問整個系統 - 管理員和主頁。所以我將ROLE_ADMIN添加到/ main/home攔截url。Spring Security授權 - 管理員被拒絕訪問

這是安全XML

<http auto-config="true" use-expressions="true"> 

<intercept-url pattern="/**" requires-channel="https" /> 
<intercept-url pattern='/main/home/' access="hasRole('ROLE_USER' 'ROLE_ADMIN')" /> 
<intercept-url pattern='/admin/admin/**' access="hasRole('ROLE_ADMIN')" /> 
<intercept-url pattern='/main/user/setter/settingpage' access="hasRole('ROLE_USER')" /> 
<intercept-url pattern='/main/user/setter/addpage' access="hasRole('ROLE_USER')" /> 
<intercept-url pattern='/login.jsp' access='IS_AUTHENTICATED_ANONYMOUSLY' /> 

<form-login login-page="/login.jsp" default-target-url="/main/home" authentication-failure-url="/auth/loginfail?error=true"/> 

</http> 

但是,這使整個程序停止工作,當我運行的代碼,因爲它是錯誤

無法解析表達式「hasRole(」 ROLE_USER「ROLE_ADMIN')」

當我刪除ROLE_ADMIN系統工作,並且可以驗證用戶身份只是不ROLE_ADMIN誰現在被拒絕訪問所有頁面。在數據庫中,我已經設置了角色,直到最近纔開始工作。

回答

12

隨着錯誤消息表示,

無法解析表達式 'hasRole(' ROLE_USER」 ROLE_ADMIN')

您需要使用hasAnyRole()用逗號分隔當局的名單。

返回true,如果當前主體擁有任何一個提供的角色 (給出一個逗號分隔字符串列表)中,see

因此改變

<intercept-url pattern='/main/home/' access="hasRole('ROLE_USER' 'ROLE_ADMIN')" /> 

<intercept-url pattern='/main/home/' access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" /> 

因爲,你已經設置use-expressions爲true,則需要更改

IS_AUTHENTICATED_ANONYMOUSLY 

isAnonymous() 
0

規劃環境地政司:春表達式語言

access="hasRole('ROLE_USER') and hasRole('ROLE_ADMIN')" 

也:

access="hasRole('USER_ADMIN') and hasIpAddress('192.168.1.10')"