2009-10-28 30 views
42

Quiero mostrar contenido a cualquier usuario que esté conectado y ocultarlo si no está conectado. Estoy usando jsp's y spring security.cómo mostrar condicionalmente el contenido de jsp a los usuarios con seguridad Spring

Obviamente, una solución de cosecha propia se realiza fácilmente. Pero, ¿cuál es la forma estándar más limpia de lograr esto?

Las etiquetas de seguridad de primavera no parecen tener una buena forma que permita agregar nuevas funciones en el futuro.

Respuesta

78

que he tenido éxito con lo siguiente:

<sec:authorize ifAnyGranted="ROLE_ANONYMOUS"> 
     <td><a href="<c:url value="/login.htm"/>">Login</a></td> 
    </sec:authorize> 
    <sec:authorize ifNotGranted="ROLE_ANONYMOUS"> 
     <td><a href="<c:url value="/j_spring_security_logout"/>">Logout</a></td> 
    </sec:authorize> 

Nuevos roles se pueden añadir sin afectar a la lógica aquí.


Para lograr esta respuesta hasta la fecha con Spring Security 3, utilizando las expresiones isAnonymous() y isAuthenticated() han funcionado bien en combinación hasta ahora para lograr la misma cosa. He aquí un ejemplo:

<sec:authorize access="isAnonymous()"> 
    <form method="POST" action="<c:url value='j_spring_security_check'/>"> 
     Username: <input name="j_username" type="text" value="${SPRING_SECURITY_LAST_USERNAME}" /> 
     Password: <input name="j_password" type="password" /> 
     <input type="submit" value="Sign in" /> 
    </form> 
</sec:authorize> 
<sec:authorize access="isAuthenticated()"> 
    <a href="<c:url value="/j_spring_security_logout" />">Logout</a> 
</sec:authorize> 
+16

El atributo 'ifAnyGranted' ha quedado obsoleto en Spring Security 3.0 a favor del atributo' access', por ejemplo ''. – Josh

+3

Gracias por la respuesta, me ayudó. Además, la biblioteca de etiquetas debe agregarse al archivo jsp: '<% @ taglib prefix =" sec "uri =" http://www.springframework.org/security/tags "%>' Si maven se utiliza, se debe agregar la siguiente dependencia al proyecto: groupId: org.springframework.security, artifactId: spring-security-taglibs –

+0

Se suponía que se utilizaran comillas simples para evitar una impresión '>' antiestética en el navegador. Aquí está la sintaxis correcta con comillas simples: 'Click here to Logout'. De lo contrario, +1. – CodeMed

1

Así es como estoy haciendo esto:

<%@ page import="org.springframework.security.context.SecurityContextHolder" %> 

<c:if test="<%=SecurityContextHolder.getContext().getAuthentication() != null %>"> 
    <!-- your secure content here --> 
</c:if> 

Vamos a saber si esto funciona para usted también ...

-aj

3

¿Qué tal:

<%@ taglib uri="http://acegisecurity.org/authz" prefix="authz" %> 

<c:set var="authenticated" value="${false}"/> 
<authz:authorize ifAllGranted="ROLE_USER"> 
    <c:set var="authenticated" value="${true}"/> 
</authz:authorize> 

<c:if test="${authenticated}"> 
<!-- your secure content here --> 
</c:if> 
+1

Spring Security 2.0 usa un taglib uri diferente. –

7

¿Qué tal esto? - Spring 2.5 compatible ;-)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %> 

<security:authorize ifAllGranted="ROLE_USER"> 
    Welcome <%= request.getUserPrincipal().getName() %> 
    <a href="<c:url value="/j_spring_security_logout"/>">Logout</a><br/> 
</security:authorize> 
12

Puede utilizar Primavera EL en la etiqueta <sec:authorize />, así:

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 

<sec:authorize access="isAuthenticated()"> 
    YES, you are logged in! 
</sec:authorize> 
27

La versión actual (3.1 tal vez incluso antes) admite parámetros var para guardar el resultado en un atributo . Por que puede codificar el siguiente:

<sec:authorize var="loggedIn" access="isAuthenticated()" /> 
<c:choose> 
    <c:when test="${loggedIn}"> 
     You are loged in 
    </c:when> 
    <c:otherwise> 
     You are logged out 
    </c:otherwise> 
</c:choose> 
2

el más simple i utilizado para codificar esta ...

<% 
if (request.getRemoteUser()== null) {%> 
    <!-- put public-only information--> 
<%}%> 
0

puede utilizar este JSP dentro de la seguridad de primavera etiqueta

request.getUserPrincipal().getName() 
Cuestiones relacionadas