it-swarm.com.de

wie Sie jsp-Inhalt mit Spring-Sicherheit für angemeldete Benutzer bedingt anzeigen können

Ich möchte den Inhalt für jeden angemeldeten Benutzer anzeigen und ausblenden, wenn er nicht angemeldet ist. Ich verwende JSPs und Spring Security. 

Offensichtlich ist eine hausgemachte Lösung leicht zu bewerkstelligen. Aber was ist der sauberste Standard, um dies zu erreichen? 

Spring-Sicherheits-Tags scheinen keine schöne Art und Weise zu haben, um in Zukunft neue Rollen hinzufügen zu können.

42
Pablojim

Ich hatte Erfolg mit folgendem:

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

Neue Rollen können hier hinzugefügt werden, ohne die Logik zu beeinflussen.


Um diese Antwort mit Spring Security 3 auf den neuesten Stand zu bringen, haben die Ausdrücke isAnonymous() und isAuthenticated() in Kombination gut funktioniert, um dasselbe zu erreichen. Hier ist ein Beispiel:

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

Die aktuelle Version (3.1 vielleicht sogar früher) unterstützt var-Parameter zum Speichern des Ergebnisses in einem Attribut. Auf diese Weise können Sie Folgendes kodieren:

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

Sie können Spring EL im Tag <sec:authorize /> wie folgt verwenden:

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

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

Wie wäre es damit? - Spring 2.5 kompatibel ;-)

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

Wie wäre es mit:

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

der einfachste, den ich benutzt habe, um das zu codieren ...

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

So mache ich das:

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

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

Lassen Sie mich wissen, ob dies auch für Sie funktioniert ...

-aj

1
AJ.

sie können dieses Jsp-Spring-Sicherheits-Tag verwenden

request.getUserPrincipal().getName()
0
Moh-Othmanovic