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>
........省略
-
-
回复u012765139:第二个SystemPrivilegePK
package com.isoftstone.bean.privilege;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
/**
* 系统权限实体的联合主键,用作标示属性的实体要实现序列化接口
*/
@Embeddable
public class SystemPrivilegePK implements Serializable{
private static final long serialVersionUID = -3808348043686366319L;
/** 模块 **/
private String module;
/** 权限值 **/
private String privilege;
public SystemPrivilegePK(){}
public SystemPrivilegePK(String module, String privilege) {
this.module = module;
this.privilege = privilege;
}
@Column(length=20, name="module")
public String getModule() {
return module;
}
public void setModule(String module) {
this.module = module;
}
@Column(length=20, name="privilege")
public String getPrivilege() {
return privilege;
}
public void setPrivilege(String privilege) {
this.privilege = privilege;
}
}
-
回复u012765139:这是两个javabean
第一个SystemPrivilege
@Entity
public class SystemPrivilege {
private SystemPrivilegePK id;
private String name;
private Set<PrivilegeGroup> groups = new HashSet<PrivilegeGroup>();/**权限被分配到的权限组**/
public SystemPrivilege(){}
public SystemPrivilege(String module, String privilege, String name) {
this.id = new SystemPrivilegePK(module, privilege);
this.name = name;
}
public SystemPrivilege(SystemPrivilegePK id) {
this.id = id;
}
/**联合主键的表示方式**/
@EmbeddedId
public SystemPrivilegePK getId() {//JPA 实体的标识属性必须实现序列化
return id;
}
public void setId(SystemPrivilegePK id) {
this.id = id;
}
@Column(length=20,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany(cascade=CascadeType.REFRESH, mappedBy="privileges")
public Set<PrivilegeGroup> getGroups() {
return groups;
}
public void setGroups(Set<PrivilegeGroup> groups) {
this.groups = groups;
}
}
-
回复u012765139:第二个SystemPrivilegePK