spring - Spring Security授权-管理员被拒绝访问

标签 spring security spring-mvc spring-security

角色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>  

但这使整个程序停止工作,因为当我运行代码时,错误是

Failed to parse expression 'hasRole('ROLE_USER' 'ROLE_ADMIN')'



当我确实删除ROLE_ADMIN时,系统可以运行并且可以对用户进行身份验证,而不能对现在拒绝访问所有页面的ROLE_ADMIN进行身份验证。在数据库中,我已经设置了角色,并且一直工作到最近。

最佳答案

如错误消息所示,

Failed to parse expression 'hasRole('ROLE_USER' 'ROLE_ADMIN')



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

Returns true if the current principal has any of the supplied roles (given as a comma-separated list of strings), 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()

关于spring - Spring Security授权-管理员被拒绝访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16385777/

相关文章:

java - 如何获取当前 HttpRequest 本地的 Spring bean

java - 如何将一对多/一对一映射到 Spring Data R2DBC 中的 POJO

php - 如何使用 PHP 正确地保护图像上传?

spring - Thymeleaf 3 和 Tiles2 集成

java - 如何将 html select 中的变量作为 PathVariable 传递?

java - org.springframework.web.servlet.DispatcherServlet noHandlerFound 用于基本的 spring 示例

java - 将制表符作为注释参数传递 : "attribute value must be constant"

java - 从spring 2.5开始如何调用restful服务

java - 如何保护 Web 服务位置的安全?

java - 自动化多人游戏中的坑洼,玩家可以使用自己的算法