需求说明
一个权限标签,作用是在标签里面的内容如果在用户权限范围内,就响应(输出标签里面包含的内容)。需要JSP-API的依赖
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
定义DTD
这里定义了一个role的标签,接受一个参数roleCode,这里为我自己项目里面定义的权限编码.这里文件名为x.dtd,放在WEB-INF目录下.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>2.4</jspversion>
<shortname>x</shortname>
<tag>
<name>role</name>
<tagclass>com.xdnote.Role</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>roleCode</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
写标签处理类 Role
public class Role extends TagSupport{
private String roleCode;
public String getRoleCode() {
return roleCode;
}
public void setRoleCode(String roleCode) {
this.roleCode = roleCode;
}
@Override
public int doStartTag() throws JspException {
//如果有权限,则输出标签内内容,否则不输出
HttpServletRequest request = (HttpServletRequest) this.pageContext.getRequest();
//这里的RoleUtil是我的另外一个类,不贴代码了: 功能如下
// 1. 根据request获取当前登录用户
// 2. 根据 当前用户 与 roleCode 来判断当前用户是否具有roleCode的权限
if(RoleUtil.hasRole(request,roleCode)){
return EVAL_BODY_INCLUDE;
}
return SKIP_BODY;
}
}
将dtd文件加入到web.xml
<jsp-config>
<taglib>
<taglib-uri>x</taglib-uri>
<taglib-location>x.tld</taglib-location>
</taglib>
</jsp-config>
最后,使用
<%@taglib prefix="x" uri="x"%>
<x:role roleCode="delete">
<!-- 仅具有delete权限的用户才会输出这一段代码 -->
<a href="/delete">删除</a>
</x:role>
<script>
var showItem = ['custom'];
<x:role roleCode="vip">
// 仅具有vip权限的用户才会输出这一段代码
showItem.push('vip');
</x:role>
console.log(showItem);
</script>