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!" />
?????????????????? </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属性即可以做到这三个属性相同的事情。