jsp自定义标签实现权限拦截

最近项目需要要实现在页面端一个权限拦截功能。具体需求是,一个用户登陆到系统后,判断他是否有执行某个功能的权限,如果有权限,则功能键对该用户可见;否则的话,不可见。要实现此功能,自定义标签无疑是一种很好的解决办法。具体方法如下:(语言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下。

 
    

yuguan wuxipolice permission taglib permission taglib 1.0 yunguan http://www.wuxipolice.cn/

权限校验标签,有权限就显示标签体的内容,否则不显示 permission com.yg.web.taglib.PermissionTag JSP module true false privilege true false

 

3、在JSP页面内导入并且使用。

 
    

<%@ taglib uri=http://www.wuxipolice.cn/WEB-INF/classes/META-INF/permission prefix="yg" %> 引入

.........省略

      ?method=editDepartmentUI&departmentid=${entry.departmentid}">      

........省略


回复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 groups = new HashSet();/**权限被分配到的权限组**/

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 getGroups() {
return groups;
}
public void setGroups(Set groups) {
this.groups = groups;
}


}
Re:  戛然灬空城 2014-05-28 16:33发表 [回复]
回复lichao3459:谢了...
.

你可能感兴趣的:(java,系统架构)