2009-10-28 1 views
42

Ich möchte Inhalt zu jedem Benutzer, der angemeldet ist, und zu verbergen, wenn sie nicht angemeldet sind. Ich benutze JSP und Feder Sicherheit.wie JSP-Inhalt bedingte zeigen, um angemeldete Benutzer mit Spring Sicherheit

Offensichtlich ist eine selbst gezüchtete Lösung leicht gemacht. Aber was ist der sauberste Standard, um dies zu erreichen?

Spring-Sicherheits-Tags scheinen keinen guten Weg zu haben, um in der Zukunft neue Rollen hinzuzufügen.

Antwort

78

Ich hatte Erfolg mit den folgenden:

<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 hinzugefügt werden können, ohne die Logik hier zu beeinflussen.


Um diese Antwort zu bringen 3 auf dem Laufenden mit Spring Security up, haben bisher auch die isAnonymous() und isAuthenticated() Ausdrücke arbeitete in Kombination das gleiche zu erreichen. Hier 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> 
+16

Das Attribut "ifAnyGranted" wurde in Spring Security 3.0 zugunsten des Attributs "access" verworfen, z. B. "'. – Josh

+3

Danke für die Antwort, es hat mir geholfen. Zusätzlich sollte die Tag-Bibliothek zur jsp-Datei hinzugefügt werden: '<% @ taglib prefix =" sec "uri =" http://www.springframework.org/security/tags "%>' Wenn maven verwendet wird, sollte die folgende Abhängigkeit zum Projekt hinzugefügt werden: groupId: org.springframework.security, artifactId: spring-security-taglibs –

+0

Sie wollten einfache Anführungszeichen verwenden, um ein unansehnliches '>' Ausdrucken im Browser zu vermeiden. Hier ist die korrekte Syntax mit einfachen Anführungszeichen: 'Click here to Logout'. Andernfalls +1. – CodeMed

1

Hier ist, wie ich das tue:

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

-AJ

3

Wie wäre:

<%@ 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 verwenden 2.0 verwendet ein anderes Taglib-URI. –

7

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

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

können Sie verwenden Frühling EL im Tag <sec:authorize />, wie folgt aus:

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

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

Die aktuelle Version (3.1 vielleicht sogar früher) unterstützt var Parameter für das Speichern des Ergebnisses in ein Attribut . Damit können Sie den folgenden Code:

<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

die einfachste i verwendet, um dieses zu kodieren ...

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

Sie diese in jsp Federsicherheitsetikett

request.getUserPrincipal().getName() 
Verwandte Themen