2009-10-28 13 views
42

Chcę pokazać zawartość każdemu użytkownikowi, który jest zalogowany i ukryć, jeśli nie jest zalogowany. Używam zabezpieczeń jsp i wiosennych.jak warunkowo pokazać zawartość jsp dla zalogowanych użytkowników z ochroną Spring

Oczywiście łatwo jest zrobić domowe rozwiązanie. Ale jaki jest najczystszy standardowy sposób osiągnięcia tego?

Wiosenne tagi bezpieczeństwa wydają się nie mieć dobrego sposobu na dodanie nowych ról w przyszłości.

Odpowiedz

78

miałem sukces z następujących czynności:

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

Nowe role mogą być dodawane bez wpływu na logikę tutaj.


Aby wywołać tę odpowiedź na bieżąco z wiosennym Bezpieczeństwa 3, stosując wyrażenia isAnonymous() i isAuthenticated() pracował dobrze w połączeniu dotąd osiągnąć to samo. Oto przykład:

<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

Atrybut 'ifAnyGranted' został wycofany w Spring Security 3.0 na rzecz atrybutu' access', na przykład ''. – Josh

+3

Dziękuję za odpowiedź, pomogło mi to. Ponadto do pliku jsp należy dodać bibliotekę znaczników: '<% @ taglib prefix =" sec "uri =" http://www.springframework.org/security/tags "%>' Jeśli maven jest używany, następująca zależność powinna zostać dodana do projektu: groupId: org.springframework.security, artifactId: spring-security-taglibs –

+0

Zamierzałeś użyć pojedynczych cudzysłowów, aby uniknąć brzydkiego drukowania '>' w przeglądarce. Oto poprawna składnia z pojedynczymi cytatami: 'Click here to Logout'. W przeciwnym razie +1. – CodeMed

1

Oto jak robie to:

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

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

Daj mi znać, jeśli działa to dla Ciebie zbyt ...

-aj

3

Jak o:

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

Wiosna Security 2.0 używa innego taglib uri. –

7

Jak o tym? - Wiosna 2,5 zgodny ;-)

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

Można użyć Wiosna EL w tagu <sec:authorize />, tak:

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

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

Aktualna wersja (3.1 może nawet wcześniej) obsługuje parametry VaR zapisując wynik do atrybutu . Przez które można kodować następujące:

<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

najprostszy i używany do kodowania tego ...

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

można użyć tego środka bezpieczeństwa JSP wiosna tag

request.getUserPrincipal().getName()