2009-10-28 17 views
42

वाले उपयोगकर्ताओं में लॉग इन करने के लिए सशर्त रूप से जेएसपी सामग्री को कैसे दिखाया जाए, मैं लॉग इन किए गए किसी भी उपयोगकर्ता को सामग्री दिखाना चाहता हूं और अगर वे लॉग इन नहीं हैं तो छुपाएं। मैं jsp और वसंत सुरक्षा का उपयोग कर रहा हूं।स्प्रिंग सुरक्षा

स्पष्ट रूप से एक घर उगाया गया समाधान आसानी से किया जाता है। लेकिन इसे प्राप्त करने का सबसे साफ मानक तरीका क्या है?

वसंत सुरक्षा टैग में ऐसा कोई अच्छा तरीका प्रतीत नहीं होता है जो भविष्य में नई भूमिकाओं को जोड़ने की अनुमति देगा।

उत्तर

78

मैं निम्नलिखित के साथ सफलता मिली है:

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

नई भूमिकाओं यहाँ तर्क को प्रभावित किए बिना जोड़ा जा सकता है।


स्प्रिंग सुरक्षा 3 के साथ तारीख तक इस उत्तर लाने के लिए, isAnonymous() और isAuthenticated() अभिव्यक्ति का उपयोग करते संयोजन में अच्छी तरह से काम किया है अब तक एक ही बात को प्राप्त करने के। यहाँ एक उदाहरण है:

<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' विशेषता को 'एक्सेस' विशेषता' के पक्ष में स्प्रिंग सुरक्षा 3.0 में बहिष्कृत कर दिया गया है, उदाहरण के लिए ''। – Josh

+3

उत्तर के लिए धन्यवाद, यह मेरी मदद की। इसके अतिरिक्त, टैग लाइब्रेरी को jsp फ़ाइल में जोड़ा जाना चाहिए: '<% @ टैगलिब उपसर्ग =" सेकंड "uri =" http://www.springframework.org/security/tags "%>' अगर मैवेन का उपयोग किया जाता है, निम्नलिखित निर्भरता को परियोजना में जोड़ा जाना चाहिए: groupId: org.springframework.security, artifactId: spring-security-taglibs –

+0

ब्राउज़र में एक भयानक '>' प्रिंटिंग से बचने के लिए आपको सिंगल कोट्स का उपयोग करना था। सिंगल कोट्स के साथ सही वाक्यविन्यास यहां दिया गया है: 'Click here to Logout'। अन्यथा, +1। – CodeMed

1

यहाँ मैं यह कैसे कर रहा हूँ है:

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

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

मुझे पता है कि अगर यह भी आप के लिए काम करता है ...

-aj

3

कैसे के बारे में:

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

स्प्रिंग सुरक्षा 2.0: कि करके आप निम्नलिखित कोड कर सकते हैं एक अलग टैगलिब यूरी का उपयोग करता है। –

7

यह कैसे है? - स्प्रिंग 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> 
12

आप, टैग <sec:authorize /> में स्प्रिंग ईएल उपयोग कर सकते हैं इस तरह:

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

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

वर्तमान संस्करण (3.1 शायद भी पहले) एक विशेषता में परिणाम को बचाने के लिए वर मानकों का समर्थन करता है ।

<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
सरलतम मैं इस कोड करने के लिए इस्तेमाल किया

...

<% 
if (request.getRemoteUser()== null) {%> 
    <!-- put public-only information--> 
<%}%> 
0
इस अंदर jsp वसंत सुरक्षा

आप उपयोग कर सकते हैं टैग

request.getUserPrincipal().getName() 
संबंधित मुद्दे