首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

SpringSecurity札记2-Securing View Level Elements

2012-07-15 
SpringSecurity笔记2-Securing View Level ElementsSpringSecurity提供了三个JSP安全标签用于在视图层提供

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

热点排行