كيفية إظهار مشروط محتوى التخطيط الاستراتيجي المشترك لتسجيل الدخول للمستخدمين مع أمن الربيع

StackOverflow https://stackoverflow.com/questions/1638170

سؤال

وأريد أن أثبت المحتوى إلى أي مستخدم بتسجيل الدخول ولإخفاء إذا لم يتم دخولك. أنا أستخدم الأمن التخطيط الاستراتيجي المشترك والربيع.

ومن الواضح أن ما يتم حل المنزل نمت بسهولة. ولكن ما هي أنظف طريقة قياسية لتحقيق ذلك؟

والعلامات الأمنية الربيع لا يبدو أن لديها طريقة لطيفة من شأنها أن تسمح لإضافة أدوار جديدة في المستقبل.

هل كانت مفيدة؟

المحلول

ولقد كان نجاح بما يلي:

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

نصائح أخرى

والإصدار الحالي (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>

ويمكنك استخدام الربيع EL في العلامة <sec:authorize />، مثل هذا:

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

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

وكيف 'بوت هذا؟ - ربيع 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>

وماذا عن:

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

وأبسط اعتدت أن رمز هذا ...

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

وهنا هو كيف وأنا أفعل هذا:

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

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

واسمحوا لي أن أعرف إذا كان هذا يعمل لك أيضا ...

و-aj

ويمكنك استخدام هذا التخطيط الاستراتيجي المشترك داخل ربيع العلامة أمن

request.getUserPrincipal().getName()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top