java - form - taglib spring
cómo mostrar condicionalmente el contenido de jsp a los usuarios que inician sesión con la seguridad de Spring (8)
¿Qué tal esto? - Cumple con Spring 2.5 ;-)
<%@ 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>
Quiero mostrar contenido a cualquier usuario que esté conectado y ocultarlo si no está conectado. Estoy usando la seguridad de jsp y spring.
Obviamente, una solución local es fácil de hacer. 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 nuevos roles en el futuro.
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>
Avísame si esto también funciona para ti ...
-aj
La versión actual (3.1 quizás incluso antes) admite varios parámetros para guardar el resultado en un atributo. Con eso puedes codificar lo 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>
Puede usar Spring 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>
Qué tal si:
<%@ 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>
Tuve é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>
Se pueden agregar nuevos roles sin afectar la lógica aquí.
Para actualizar esta respuesta con Spring Security 3, el uso de las isAnonymous()
y isAuthenticated()
ha funcionado bien en combinación hasta el momento para lograr lo mismo. Aquí hay 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>
el más simple que utilicé para codificar esto ...
<%
if (request.getRemoteUser()== null) {%>
<!-- put public-only information-->
<%}%>
puedes usar esto dentro de la etiqueta de seguridad jsp spring
request.getUserPrincipal().getName()