`

SpringSecurity笔记2-Securing View Level Elements

 
阅读更多

SpringSecurity提供了三个JSP安全标签用于在视图层提供安全,如下:

(1) <security:accesscontrollist> : 如果当前认证的用户在指定的领域对象中有规定的许可之一,那么这个标签体中的

内容将被Rendered.

(2) <security:authentication> : 访问当前被认证用户的属性。
(3) <security:authorize> : 根据用户拥有的授权,展示标签体中的内容.

使用上述三个标签需要在JPS中声明:

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

1. <security:authentication>

    例如: 页面显示当前被认证用户的用户名。

    Hello <security:authentication property="principal.username" />!

    通过该标签可访问认证用户信息的几个属性:

    (1)auhtorites: GrantedAuthority对象的集合,即已授权给当前认证用户的权限;

    (2)credentials: 用于校验principal,通常指用户密码;

    (3)details: 认证的附件信息,如:IP地址,证书序列号,SessionId;

    (4)principal: 用户的principal.

    示例:给用户名指定一个变量:

    <security:authentication property="principal.username" var="loginId" />

    将创建的变量指定在某个区域(request,session)中:

    <security:authentication property="principal.username" var="loginId" scope="request" />

2. <security:authorize>

    例如:如果用户拥有"ROLE_SPITTER"权限将显示Form:

    <security:authorize access="hasRole('ROLE_SPITTER')">
             <c:url value="/spittle"  var="spittle_url" />
             <form:form modelAttribute="spittle" method="POST" action="${spittle_url}/form">
                   <span id="label"><spring:message code="label.spittle" text="Enter spittle:"/></span>

 

                   <form:textarea path="text" rows="2" cols="40" />
                   <form:errors path="text" />
                   <br/>
                   <div style="width:100%;text-align:right;">
                          <input type="submit" value="Spit it!" class="status-btn round-btn disabled" />
                   </div>
              </form:form>
    </security:authorize>

    例如:如果用户名为"habuma"将显示超链接:

    <security:authorize access="isAuthenticated() and principal.username=='habuma' ">
            <a href="/admin">Administration</a>
    </security:authorize>

    上面个这种配置有Bug,若从浏览器中输入"/admin"也可以访问,解决该问题有两种方法:

     (1) 添加<intercept-url>元素

     <intercept-url pattern="/admin/**"  access="hasRole('ROLE_ADMIN') and   

             hasIpAddress('192.168.1.2')"/>

     这种配置解决了上面的问题但需要的配置文件和JSP中都需要配置。

     (2) 使用<security:authorize>的url属性

     <security:authorize url="/admin/**">
             <spring:url value="/admin" var="admin_url" />
             <br/><a href="${admin_url} ">Admin</a>
     </security:authorize>

     推荐使用方法2.

 

     该标签其他属性:

     ifAllGranted, ifAnyGranted,  ifNotGranted指当前用户是否已经被授于了权限或授予了上面权限,这三个标签

     在SpringSecurity中已经不推荐使用,因为通过SpringEL和access属性即可以做到这三个属性相同的事情。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics