6

角色管理员的授权被拒绝访问整个系统 - 管理员和主页。所以我将 ROLE_ADMIN 添加到 /main/home 拦截 URL 中。

这是安全 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现在被拒绝访问所有页面的用户。在数据库中,我已经设置了角色,直到最近它还在工作。

4

2 回答 2

15

如错误消息所示,

无法解析表达式 'hasRole('ROLE_USER' 'ROLE_ADMIN')

您需要使用hasAnyRole()逗号分隔的权限列表。

如果当前主体具有任何提供的角色(以逗号分隔的字符串列表形式给出),则返回 true,请参阅

所以改变

<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()
于 2013-05-05T15:16:22.777 回答
0

SpEL:弹簧表达式语言

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

还:

access="hasRole('USER_ADMIN') and hasIpAddress('192.168.1.10')"
于 2016-02-15T03:02:28.933 回答