2013-05-05 54 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')" 
相关问题