【问题标题】:Spring Security , access="ROLE_ADMIN" Vs access="hasAnyRole('ROLE_ADMIN')Spring Security,访问=“ROLE_ADMIN”与访问=“hasAnyRole('ROLE_ADMIN')
【发布时间】:2017-08-22 19:37:13
【问题描述】:

在 Spring Security 中:

<sec:http pattern="/api/**" create-session="never"
        entry-point-ref="oauthAuthenticationEntryPoint"
        access-decision-manager-ref="accessDecisionManager"
        xmlns="http://www.springframework.org/schema/security">
        <anonymous enabled="false" />
        <intercept-url pattern="/api/**" access="ROLE_ADMIN" />
        <custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
        <access-denied-handler ref="oauthAccessDeniedHandler" />
</sec:http>

在这一行&lt;intercept-url pattern="/api/**" access="ROLE_ADMIN" /&gt;

如果我写有什么区别:

&lt;intercept-url pattern="/api/**" access="hasRole('ROLE_ADMIN')" /&gt;

或:

&lt;intercept-url pattern="/api/**" access="hasAnyRole('ROLE_ADMIN')" /&gt;

【问题讨论】:

    标签: java spring spring-security


    【解决方案1】:

    正如Spring Security documentation 所说:

    hasRole([role]):如果当前主体具有 指定role

    hasAnyRole([role1,role2]):如果当前主体具有任何提供的角色(以逗号分隔的字符串列表形式给出),则返回 true。

    另外,在access 属性上,documentation 声明:

    access:列出将存储在 FilterInvocationSecurityMetadataSource 用于定义的 URL 模式/方法组合。这应该是一个逗号分隔的列表 安全配置属性(例如角色名称)。

    但在您的情况下,您将单个元素列表传递给 hasAnyRole,所以:

    access="ROLE_ADMIN" 与 access="hasAnyRole('ROLE_ADMIN')

    hasRole('ROLE_ADMIN')hasAnyRole('ROLE_ADMIN') 相同,都表示当前主体应该拥有ROLE_ADMIN 权限。

    “主体”通常是指可以在您的应用程序中执行操作的用户、设备或其他一些系统)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 2016-08-25
      • 2013-10-19
      • 2017-08-23
      • 2015-01-12
      相关资源
      最近更新 更多