Spring Security授权 - 管理员被拒绝访问
问题描述:
角色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
谁现在被拒绝访问所有页面。在数据库中,我已经设置了角色,直到最近才开始工作。
答
随着错误消息表示,
无法解析表达式 '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()
答
规划环境地政司:春表达式语言
access="hasRole('ROLE_USER') and hasRole('ROLE_ADMIN')"
也:
access="hasRole('USER_ADMIN') and hasIpAddress('192.168.1.10')"