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})">
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:
<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 llamadaallowed.groups.property
.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
.Finalmente, usa la variable
allowedGroups
en tu etiquetasec: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!