最近项目需要要实现在页面端一个权限拦截功能。具体需求是,一个用户登陆到系统后,判断他是否有执行某个功能的权限,如果有权限,则功能键对该用户可见;否则的话,不可见。要实现此功能,自定义标签无疑是一种很好的解决办法。具体方法如下:(语言java、页面实现jsp、开发工具myeclipse6.5)
1、编写标签类,标签类就是普通的java类,只是该类要继承TagSupport类。
2、建立TLD文件,定义表达式函数。
3、在JSP页面内导入并且使用。
案列说明:
1、编写标签类
public class PermissionTag extends TagSupport {
//模块
private String module;
//模块中具体权限
private String privilege;
public String getModule() {
return module;
}
public void setModule(String module) {
this.module = module;
}
public String getPrivilege() {
return privilege;
}
public void setPrivilege(String privilege) {
this.privilege = privilege;
}
@Override
public int doStartTag() throws JspException {
boolean result = false;
User user = WebUtil.getUser((HttpServletRequest) pageContext.getRequest());//WebUtil是自定义的工具类,获取此时登陆的用户
SystemPrivilege privilege = new SystemPrivilege(new SystemPrivilegePK(this.module,this.privilege));
for(PrivilegeGroup privilegeGroup : user.getGroups()){//循环检测用户具有的权限组
privilegeGroup.getPrivileges().contains(privilege);//用户的权限是否包含功能权限
result = true;
break;
}
return result? EVAL_BODY_INCLUDE : SKIP_BODY;//真:返回EVAL_BODY_INCLUDE(执行标签);假:返回SKIP_BODY(跳过标签不执行)
}
}
2、建立TLD文件,该文件要放在类文件夹下META-INF下。
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>yuguan wuxipolice permission taglib</description><!-- 描述 --> <display-name>permission taglib</display-name> <tlib-version>1.0</tlib-version><!-- 版号 --> <short-name>yunguan</short-name> <!-- 简单名称 --> <uri>http://www.wuxipolice.cn/</uri> <!-- 引用路径 -->
<tag> <description>权限校验标签,有权限就显示标签体的内容,否则不显示</description> <name>permission</name> <!-- 标签名 --> <tag-class>com.yg.web.taglib.PermissionTag</tag-class> <!-- 标签类 --> <body-content>JSP</body-content> <attribute> <description></description> <name>module</name> <!-- 属性名 --> <required>true</required> <!-- 标签的属性是否是必须的 --> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description></description> <name>privilege</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> </taglib>
3、在JSP页面内导入并且使用。
<%@ taglib uri=http://www.wuxipolice.cn/WEB-INF/classes/META-INF/permission prefix="yg" %> 引入
.........省略
<yg:permission module="department" privilege="update"> <a href="<html:rewrite action="/control/department/manage"/>?method=editDepartmentUI&departmentid=${entry.departmentid}"> <img src="/images/edit.gif" width="15" height="16" border="0"></a> </yg:permission>
........省略
文章出处: https://blog.youkuaiyun.com/lichao3459/article/details/8266924
本文介绍如何使用自定义标签实现页面端权限拦截功能。通过编写Java类继承TagSupport,并结合TLD文件定义及JSP页面使用,实现用户权限验证。
2115

被折叠的 条评论
为什么被折叠?



