管理员角色的授权被拒绝访问整个系统 - 管理员和主页。所以我将ROLE_ADMIN添加到/ main / home intercept-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
。我在db中设置了角色,直到最近才开始工作。
答案 0 :(得分:14)
如错误消息所示,
无法解析表达式'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()
答案 1 :(得分:0)
SpEL:Spring Expression Language
access="hasRole('ROLE_USER') and hasRole('ROLE_ADMIN')"
也:
access="hasRole('USER_ADMIN') and hasIpAddress('192.168.1.10')"