【问题标题】:Spring Security JSP Tags <sec:authorize access="hasRole('')"> not workingSpring Security JSP 标签 <sec:authorize access="hasRole('')"> 不工作
【发布时间】:2014-12-12 03:33:34
【问题描述】:

我们正在尝试为我们的网络应用程序实现一些功能。我们将 Spring Framework v4.1.1 和 Spring Security v3.1.7 用于 Web 应用程序。我们在身份验证过程中使用自定义身份验证提供程序,一切正常,但是当我们尝试使用 Spring Security 的 JSP 标记在页面中隐藏特定角色的某些内容时,它不起作用。

这是我们的security-conf.xml:

<http pattern="/resources/**" security="none" />

<http use-expressions="true">
    <form-login login-page="/login" authentication-failure-url="/loginerroneo"
        default-target-url="/seleccionar-empresa" always-use-default-target="true"/>
    <logout logout-success-url="/login" logout-url="/salir"/>
    <session-management invalid-session-url="/login" />
</http>

<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
    </authentication-provider>
</authentication-manager>

<global-method-security pre-post-annotations="enabled"/>

<beans:bean id="userDetailsService" class="com.grupo.seguridad.acceso.service.impl.UserDetailsServiceAdapater"/>

当我们在我们的页面中使用这个标签&lt;sec:authentication property="principal.authorities"/&gt;时,我们得到了 [VENDEDOR, ADMINISTRADOR] 这是正确的。

但是当我们试图使用标签隐藏页面的某些内容时:

<sec:authorize access="hasRole('ADMINISTRADOR')">
   <button class="btn btn-small btnGuardar" href="#dlgGuardar" data-toggle="modal">
      <i class="icon-hdd"></i> <strong>Una Opcion</strong>
    </button>
</sec:authorize>

它不起作用。

我们不知道自己做错了什么。

【问题讨论】:

  • 看起来它肯定可以工作。我在我们当前的项目中使用 spring security 3.2.5 并且安全标签如您所描述的那样工作。这不是空格问题,是吗(角色名称 ADMINISTRADOR 之前的空格)?
  • 默认情况下,角色应命名为“ROLE_*”。过去我在 Spring 的源代码中发现该字符串是硬编码的。
  • 管理员还是管理员?

标签: spring-mvc spring-security jsp-tags


【解决方案1】:

试试这个,

 <security:authorize ifAnyGranted="ADMINISTRADOR">
    <button class="btn btn-small btnGuardar" href="#dlgGuardar" data-toggle="modal">
          <i class="icon-hdd"></i> <strong>Una Opcion</strong>
        </button>
    </security:authorize>

【讨论】:

  • 感谢分享。它对我有用。我正在努力使用 hasRole('XXX') 方法。
  • 如果不推荐使用AnyGranted,我面临的另一件事是,我存储了用户和权限,然后在我的情况下我不得不使用“hasAuthority('admin')”或“hasAnyAuthority('admin','user ')"
【解决方案2】:

我正在使用 Spring Security 4.2 并且无法使用 hasRole 方法... 但是这段代码对我有用:

<security:authorize access="hasAuthority('ROLE_ADMIN')">
you are an admin!
<security:authorize>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 2021-06-20
    • 2017-06-16
    • 2016-11-13
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多