雖然和上一次的使用自定義的tld標籤簡化jsp的繁瑣操作的有點不同,但是目的也是一致的。自定義tag比較簡單。
1、新建tag標籤
在WEB-INF目錄下新建一個tags的資料夾,是自定義tag標籤的位置。
2、編輯標籤
<%@ tag import="org.apache.shiro.util.StringUtils"%> <%@ tag import="org.apache.shiro.SecurityUtils" %> <%@ tag import="org.apache.shiro.subject.Subject" %> <%@ tag import="java.util.Arrays" %> <%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%> <%@ attribute name="name" type="java.lang.String" required="true" description="角色字串列表" %> <%@ attribute name="delimiter" type="java.lang.String" required="false" description="角色字串列表分隔符" %> <% if(!StringUtils.hasText(delimiter)) delimiter = ","; if(!StringUtils.hasText(name)){ return ; } String[] roles = name.split(delimiter); Subject subject = SecurityUtils.getSubject(); if(subject.hasAllRoles(Arrays.asList(roles))){ %> <jsp:doBody/> <% }; %>
tag一些標籤的屬性不太複雜,一看就能懂得。<jsp:doBody/>表示如果符合條件就執行一次自定義標籤的內容。
3、使用
<%@ taglib prefix="test" tagdir="/WEB-INF/tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<test:hasAllRole name="admin">
admin
</test:hasAllRole>
</body>
</html>
jsp引入標籤庫,注意標籤庫的引用地址是tagdir,而不是uri。上述例子表示使用者有admin這個角色頁面就顯示admin。