comment afficher de manière conditionnelle le contenu jsp aux utilisateurs connectés avec la sécurité Spring

StackOverflow https://stackoverflow.com/questions/1638170

Question

Je souhaite afficher le contenu d'un utilisateur connecté et le masquer s'il ne l'est pas. J'utilise jsp et Spring Security.

De toute évidence, une solution maison est facile à mettre en place. Mais quel est le moyen standard le plus propre pour y parvenir?

Les balises de sécurité de Spring ne semblent pas avoir un moyen agréable de permettre l'ajout de nouveaux rôles dans le futur.

Était-ce utile?

La solution

J'ai eu du succès avec ce qui suit:

    <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>

De nouveaux rôles peuvent être ajoutés sans affecter la logique ici.

Pour mettre cette réponse à jour avec Spring Security 3, l'utilisation des expressions isAnonymous() et isAuthenticated() a bien fonctionné jusqu'à présent pour obtenir le même résultat. Voici un exemple:

<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>

Autres conseils

La version actuelle (3.1 peut-être même plus tôt) supporte les paramètres var pour enregistrer le résultat dans un attribut. Vous pouvez ainsi coder ce qui suit:

<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>

Vous pouvez utiliser Spring EL dans la balise <sec:authorize />, comme ceci:

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

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

Comment ça? - conforme à 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>

Que diriez-vous de:

<%@ 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>

le plus simple que j'ai utilisé pour coder ceci ...

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

Voici comment je le fais:

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

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

Faites-moi savoir si cela fonctionne pour vous aussi ...

-aj

vous pouvez utiliser cette balise de sécurité à l'intérieur du ressort jsp

request.getUserPrincipal().getName()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top