es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo usar una propiedad para grupo en la etiqueta sec:authorize de Spring para hasAnyRole

Estoy intentando utilizar una propiedad para especificar el/los grupo(s) a usar en una etiqueta sec:authorize en un jsp porque los grupos serán diferentes dependiendo de la región en la que se implemente esta aplicación. Con el nombre del grupo codificado, lo siguiente funciona:

<sec:authorize access="hasAnyRole('GRP_MY_GROUP_DEV')">

Esperaba poder hacer algo como esto (que no funciona, simplemente se comporta como si no estuviera en el grupo):

jsp
<sec:authorize access="hasAnyRole(${allowed.groups.property})">

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando usar una propiedad para especificar dinámicamente grupos en una etiqueta sec:authorize en un archivo JSP. Si bien codificar el nombre del grupo funciona para ti, te gustaría hacerlo más flexible en función de las regiones donde se implementa la aplicación.

    El segundo fragmento de código que proporcionaste, <sec:authorize access="hasAnyRole(${allowed.groups.property})">, no funciona como se espera. Está tratando ${allowed.groups.property} como una cadena literal en lugar de una variable.

    Para usar una propiedad de esta manera, primero debes recuperar el valor de la propiedad y asignarlo a una variable, y luego usar esa variable en la etiqueta sec:authorize.

    Aquí tienes un ejemplo de cómo puedes lograr esto:

    1. En tu archivo de configuración de Spring (por ejemplo, applicationContext.xml), define un marcador de posición de propiedad de esta manera:

      <context:property-placeholder location="classpath:allowed-groups.properties"></context:property-placeholder>

      Esto asume que tienes un archivo de propiedades llamado allowed-groups.properties en tu classpath, que contiene una propiedad llamada allowed.groups.property.

    2. En tu archivo JSP, usa el lenguaje de expresión de Spring (SpEL) para recuperar el valor de la propiedad y asignarlo a una variable:

      <c:set var="allowedGroups" value="${@environment.getProperty('allowed.groups.property')}"></c:set>

      Esto recuperará el valor de la propiedad y lo almacenará en una variable llamada allowedGroups.

    3. Finalmente, usa la variable allowedGroups en tu etiqueta sec:authorize:

      <sec:authorize access="hasAnyRole(${allowedGroups})">

      Esto especificará dinámicamente el/los grupo(s) en función del valor de la propiedad allowed.groups.property.

    Ten en cuenta que es posible que debas ajustar la sintaxis de la expresión hasAnyRole() en función del formato de los grupos especificados en tu archivo de propiedades.

    ¡Espero que esto te ayude!

Comments are closed.