第9章 保护spring应用 9.1 springSecurity

时间:2022-01-12 18:28:11

视图层保护 

导入标签库:<%@ 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属性。