2010-05-17 10 views
7

¿Hay alguna forma de implementar la instrucción de control con los taglibs de Spring Security?Spring Security Declaración de control de Taglibs

Actualmente sólo podemos comprobar si un usuario tiene un papel ...

<security:authorize access="hasRole('ROLE_ADMIN')"> 
    // display something 
</security:authorize> 

¿Qué hay de los demás?

Respuesta

2

valor del atributo es una expresión accessSpEL, evaluados en relación con WebSecurityExpressionRoot, para que pueda utilizar todas sus métodos y toda la sintaxis SpEL.

También puede personalizar la creación del contexto de evaluación declarando un WebSecurityExpressionHandler personalizado como un bean (luego puede agregar sus propios métodos y variables).

+7

utilizo el siguiente para simular una sentencia de control tiene administrador com no com admin Blake

+2

¿Soy yo o no responde la pregunta? Quiero escribir ' superusuario usuario ordinario'. No funciona ¿Por qué no funciona y cómo lo hago funcionar? – jameshfisher

5

Si se ha perdido el comentario de la respuesta aceptada. Aquí es cómo hacer que una sentencia de control de <security:authorize>

<security:authorize access="hasRole('ROLE_ADMIN')"> 
    // IF -- display something 
</security:authorize> 

<security:authorize access="!hasRole('ROLE_ADMIN')"> 
    // ELSE -- display something 
</security:authorize> 

Aviso ! la no declaración en condición else

créditos a @Blake

14

La pregunta es viejo, pero de todos modos ..

Puede almacenar el resultado de la evaluación de etiquetas en una variable (al menos en la versión 3.1) y luego usarlo en la construcción estándar if/else. Creo que esta es una solución más útil que la anterior.

<security:authorize access="hasRole('ROLE_ADMIN')" var="isAdmin" /> 
<c:choose> 
    <c:when test="${isAdmin}">superuser</c:when> 
    <c:otherwise>ordinary user</c:otherwise> 
</c:choose> 
Cuestiones relacionadas