以下では、タグをカスタマイズするための例として権限制御を取り上げます。
1. タグの種類
<wxt:per uri="${pageContext.request.contextPath }/privilege/list"></wxt:per>
手順:
1. SimpleTagSupport を継承するクラス PerssionTag をカスタマイズします (カスタム タグは通常、このクラスを継承します)
package cn.com.liveuc.privilege.tag; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.SimpleTagSupport; import cn.com.liveuc.privilege.model.Privilege; import cn.com.liveuc.privilege.model.Resource; import cn.com.liveuc.privilege.model.Role; import cn.com.liveuc.privilege.model.User; /** * * @说明 自定义标签 */ public class PerssionTag extends SimpleTagSupport { //自定义标签属性,用于标签传入参数 private String uri; //接收标签传入的参数 public void setUri(String uri) { this.uri = uri; } @Override public void doTag() throws JspException, IOException { //获取用户登陆后保存的Session PageContext page = (PageContext) this.getJspContext(); User user = (User) page.getSession().getAttribute("login"); //如果用户登陆 if(user != null) { //用户登陆判断用户权限 List<String> list = new ArrayList<String>(); //获取用户的角色 Set<Role> role = user.getRole(); for(Role r:role) { //获取角色对应的权限 Set<Privilege> privilege = r.getPrivilege(); for(Privilege p:privilege) { //获取权限对应的资源 Set<Resource> res = p.getResource(); for(Resource re:res) { list.add(re.getUri()); } } } for(String ur:list) { //判断用户的权限 if(ur.equals(uri)) { this.getJspBody().invoke(null); //有权限输出标签体内容 } } } } }
JSP ページにタグをインポートします:
%@taglib prefix="wxt" uri ="/wxt" %
タグを使用:
request.contextPath }/user/list" target="reight">ユーザー管理
ユーザー権限にuriリソースが含まれている場合、ラベルの内容が出力されます。