角色admin的授权被拒绝访问整个系统-admin和主页。因此,我将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>
但这使整个程序停止工作,因为当我运行代码时,错误是
当我确实删除
ROLE_ADMIN
时,系统可以运行并且可以对用户进行身份验证,而不能对现在拒绝访问所有页面的ROLE_ADMIN
进行身份验证。在数据库中,我已经设置了角色,并且一直工作到最近。 最佳答案
如错误消息所示,
您需要将hasAnyRole()
与逗号分隔的权限列表一起使用。
所以改变
<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()