如何使用Spring安全性有条件地向登录用户显示jsp内容

Pab*_*jim 43 java spring jsp spring-security

我想向任何登录的用户显示内容,如果他们没有登录则要隐藏.我正在使用jsp和spring安全性.

显然,一个成熟的解决方案很容易完成.但实现这一目标的最简洁的标准方法是什么?

Spring安全标签似乎没有很好的方法可以在将来添加新角色.

chr*_*leu 80

我在以下方面取得了成功:

    <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>
Run Code Online (Sandbox Code Playgroud)

可以在不影响逻辑的情况下添加新角色.


为了使这个答案与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>
Run Code Online (Sandbox Code Playgroud)

  • Spring Security 3.0中不推荐使用`ifAnyGranted`属性,而是使用`access`属性,例如`<sec:authorize access ="hasRole('ROLE_ANONYMOUS')">`. (20认同)
  • 谢谢你的回答,它帮助了我.另外,标签库应该添加到jsp文件中:`<%@ taglib prefix ="sec"uri ="http://www.springframework.org/security/tags"%>`如果使用了maven,应将以下依赖项添加到项目中:groupId:org.springframework.security,artifactId:spring-security-taglibs (4认同)

ewe*_*ert 28

当前版本(3.1甚至可能更早)支持var参数以将结果保存到属性中.你可以编写以下代码:

<sec:authorize var="loggedIn" access="isAuthenticated()" />
<c:choose>
    <c:when test="${loggedIn}">
        You are logged in
    </c:when>
    <c:otherwise>
        You are logged out
    </c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)


Joe*_*l S 12

你可以在标签中使用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>
Run Code Online (Sandbox Code Playgroud)


Tom*_*der 7

怎么回事? - 符合Spring 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>
Run Code Online (Sandbox Code Playgroud)