【问题标题】:Spring Security Authorization - Admin is denied accessSpring Security Authorization - 管理员被拒绝访问
【发布时间】:2013-04-29 10:37:51
【问题描述】:

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

这是安全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。在数据库中,我已经设置了角色,直到最近它还在工作。

【问题讨论】:

    标签: spring security spring-mvc spring-security


    【解决方案1】:

    SpEL:Spring 表达式语言

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

    还有:

    access="hasRole('USER_ADMIN') and hasIpAddress('192.168.1.10')"
    

    【讨论】:

      【解决方案2】:

      如错误消息所示,

      解析表达式 '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()
      

      【讨论】:

        猜你喜欢
        • 2016-05-20
        • 2015-11-13
        • 2020-12-19
        • 2014-09-25
        • 1970-01-01
        • 2023-03-22
        • 2019-08-30
        • 2018-01-04
        • 2013-10-31
        相关资源
        最近更新 更多