2009-10-28 8 views
42

Oturum açmış ve oturum açmamışlarsa gizlemek istediğim herhangi bir kullanıcıya içerik göstermek istiyorum. Jsp's and spring security kullanıyorum. Açıkçası evde yetiştirilen bir çözelti kolayca yapılabilir. Fakat bunu başarmanın en temiz standart yolu nedir?jsp içeriğinin koşullara bağlı olarak nasıl görüntüleneceğini Spring security ile oturum aç

Yaylı güvenlik etiketlerinin gelecekte yeni rollerin eklenmesini sağlayacak güzel bir yolu yok gibi görünüyor. İşte

cevap

78

Bahar 2.5 uyumlu ;-):

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

Yeni roller burada mantığı etkilemeden eklenebilir.


aynı şeyi başarmak için bugüne kadar birlikte iyi çalışmış isAnonymous() ve isAuthenticated() ifadeler kullanarak, Bahar Güvenlik 3 ile güncel Bu yanıtı ekrana getirmek için. İşte bir örnek:

<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

"ifAnyGranted" özniteliği, "Erişim" özniteliği lehine Spring Security 3.0'da kullanımdan kaldırılmıştır; örneğin, '. – Josh

+3

Cevabınız için teşekkür ederim, bana yardımcı oldu. Ayrıca, etiket kitaplığı jsp dosyasına eklenmelidir: '<% @ taglib önek =" sn "uri =" http://www.springframework.org/security/tags "%>' Eğer maven kullanılır, aşağıdaki bağımlılık projeye eklenmelidir: groupId: org.springframework.security, artifactId: spring-security-taglibs –

+0

Tarayıcınızda yazdırma çıktısını önlemek için tek tırnak kullanmanız gerekir. İşte tek tırnaklı doğru sözdizimi: 'Click here to Logout'. Aksi takdirde, +1. – CodeMed

1

yapıyorum edebilirsiniz:

-A.J.

3

...

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

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

bu da sizin için çalışan varsa söyleyin ne dersiniz:

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

Bahar Güvenlik 2.0: yani siz şu kodlayabiliriz farklı bir taglib uri kullanır. –

7

Bu nasıl? - Ben aşağıdaki başarı elde ettik

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

Böyle etikete <sec:authorize /> Bahar EL kullanabilirsiniz:

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

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

güncel sürümü (3.1 hatta belki daha eski) bir öznitelik içine sonucu kaydetmek için var parametrelerini destekler .

<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

ben bu kodlamak için kullanılan en basit ...

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

kullanabileceğiniz bu iç jsp bahar güvenlik etiketi

request.getUserPrincipal().getName() 
İlgili konular