как условно показывать контент jsp вошедшим в систему пользователям с помощью Spring security - PullRequest
42 голосов
/ 28 октября 2009

Я хочу показать контент любому пользователю, который вошел в систему, и скрыть его, если он не вошел в систему. Я использую jsp и spring security.

Очевидно, что решение для дома легко сделать. Но каков самый чистый стандартный способ достижения этого?

Похоже, что теги безопасности Spring не имеют хорошего способа добавления новых ролей в будущем.

Ответы [ 8 ]

80 голосов
/ 30 ноября 2009

У меня был успех со следующим:

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

Здесь можно добавлять новые роли, не влияя на логику.


Чтобы обновить этот ответ с помощью Spring Security 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>
27 голосов
/ 16 августа 2012

Текущая версия (3.1, возможно, даже раньше) поддерживает параметры var для сохранения результата в атрибуте. Таким образом вы можете кодировать следующее:

<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>
12 голосов
/ 11 ноября 2010

Вы можете использовать Spring EL в теге <sec:authorize />, например:

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

<sec:authorize access="isAuthenticated()">
   YES, you are logged in!
</sec:authorize>
7 голосов
/ 20 ноября 2009

Как насчет этого? - Весна 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>
3 голосов
/ 10 ноября 2009

Как насчет:

<%@ 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>
2 голосов
/ 04 декабря 2012

самое простое, что я использовал для кодирования этого ...

<%
if (request.getRemoteUser()== null) {%>  
    <!-- put public-only information-->
<%}%>
1 голос
/ 30 октября 2009

Вот как я это делаю:

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

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

Дайте мне знать, если это работает и для вас ...

0 голосов
/ 11 декабря 2017

вы можете использовать это внутри тега безопасности JSP Spring

request.getUserPrincipal().getName()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...