视图层保护
导入标签库:<%@ taglib prefix="ss" uri="http://www.springframework.org/security/tags" %>
包含三个标签:
<springSecurity:authentication property="" var="" scope="">
访问当前用户认证对象的属性
<springSecurity:accesscontrollist hasPermission="" domainObject="">
用于当前认证用户对特定的域对象具备某一指定的权限时,则渲染标签主体中的内容。
<springSecurity:authorize access="" ifAllGranted="" ifAnyGranted="" ifNotGranted="" method="" url="">
如果特定的安全性限制满足的话,则渲染标签主体中的内容
访问认证信息
对于<springSecurity:authentication>,最简单的一件事就是便利地访问用户认证信息。
如property="principal.username"。
authorities : 一组用于表示用户所授予权限的GrantedAuthority对象
credentials : 用于核实用户的凭据(通常为用户的密码)
details : 认证的附加信息(IP地址、证件序列号、回话ID等)
principal : 用户的主要信息对象
如果需要将值赋值给一个变量,只需要在var属性中指明变量的名字。变量默认是定义在页面作用域内的,如果想在其他作用域,如请求或会话作用域,可以通过scope属性来声明。
根据权限渲染
举个例子
<springSecurity:authorize access="isAuthenticated and principal.username = 'aries'" >
<a href="/admin">administration</a>
</springSecurity:authorize>
但是无法阻止别人在浏览器的地址栏中手动输入/admin,不过可以在安全性配置文件中添加一个新的<intercept-url>以更加严格的约束/admin URL的安全性。
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN') and hasIpAddress('192.168.1.2')" />
即管理功能被锁定了。URL地址得到了保护,并且到这个URL的链接在用户没有授权使用的情况下不会显示,但是为了做到这一点,需要在<intercept-url >和<springSecurity:authorize >标签中使用spel进行声明。如下:
<springSecurity:authorize url="/admin/**">
<spring:url value="/admin" var="admin_url"></spring:url>
<a href="${admin_url} }">administration</a>
</springSecurity:authorize>
这里url属性所要做的事情,不像access属性那样明确声明安全性限制,url属性对一个给定的URL模式间接引用其安全性限制,由于在配置中已经为/admin声明了安全性限制,从而这里可以使用url属性。