應用标簽庫:<%@ taglib prefix='security' uri='http://www.springframework.org/security/tags' %>
<security:authorize>是一個流程控制标簽,能夠在滿足特定安全需求的條件下顯示它的内容體。它有三個互斥的參數:
ifAllGranted——是一個由逗号分隔的權限清單,使用者必須擁有所有列出的權限時顯示;
ifAnyGranted——是一個由逗号分隔的權限清單,使用者必須至少擁有其中的一個權限時才能顯示;
ifNotGranted——是一個由逗号分隔的權限清單,使用者未擁有所有列出的權限時才能顯示。
<security:authentication>獲得屬性的值比如要獲得使用者名可以這麼寫:
<security:authentication property="principal.username"></security:authentication>
他有三個屬性,property是必須的,另外scope和var,var定義一個變量,scope定義var存在的範圍
例子:
有時需要在頁面顯示使用者名,或者根據使用者角色顯示或者不顯示一些内容。這需要使用到spring security提供的标簽庫。
在頁面中引入标簽庫:
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
使用标簽庫的示例:
<sec:authentication property="principal" var="authentication"/> <sec:authorize ifAllGranted="ROLE_USER">可以通路</sec:authorize> 使用者名:${authentication.username }<br />
前台 ROLE_ANONYMOUS表示匿名使用者
在配置檔案中可以設定頁面進入的權限
<intercept-url pattern="/Homepage.*" access="ROLE_ADMIN,IS_AUTHENTICATED_ANONYMOUSLY"/>
IS_AUTHENTICATED_ANONYMOUSLY允許匿名使用者進入
IS_AUTHENTICATED_FULLY 允許登入使用者進入
IS_AUTHENTICATED_REMEMBERED 允許登入使用者和rememberMe使用者進入
IS_AUTHENTICATED_FULLY:是則滿足以下情況傳回通過: **.既不是RememberMeAuthentication也不是AnonymousAuthenticationToken的執行個體 IS_AUTHENTICATED_REMEMBERED:是則滿足以下任一情況傳回通過: a*.Authentication是RememberMeAuthenticationToken的執行個體 b*.既不是RememberMeAuthentication也不是AnonymousAuthenticationToken的執行個體 IS_AUTHENTICATED_ANONYMOUSLY:是則滿足以下任一情況傳回通過: a*.Authentication是AnonymousAuthenticationToken的執行個體 b*.既不是RememberMeAuthentication也不是AnonymousAuthenticationToken的執行個體 c*.Authentication是RememberMeAuthenticationToken的執行個體
spring-security 在jsp中的标簽庫 1.在jsp中聲明
2.标簽 目前共有三個标簽
2.1、authorize标簽 這個标簽用來決定它的内容是否會被執行.
顯示一個特定的連結,如果使用者允許點選它.
2.2、authentication标簽 這個标簽允許通路目前的Authentication 對象, 儲存在安全上下文中。 比如,如果Authentication 的principal 屬性是Spring Security 的UserDetails 對象的一個執行個體, 就要使用
來渲染目前使用者的名稱。
當然,它不必使用JSP 标簽來實作這些功能,一些人更願意在視圖中保持邏輯越少越好。你可以在你的MVC 控制器中通路Authentication 對象( 通過調用 SecurityContextHolder.getContext().getAuthentication()) 然後直接在模型中添加資料,來渲染視圖。
2.3、accesscontrollist标簽 這個标簽紙在使用Spring Security ACL 子產品時才可以使用。它檢測一個用逗号分隔的特 定領域對象的需要權限清單。如果目前使用者擁有這些權限的任何一個,标簽内容就會被執行。 否則,就會被略過。