📄 jspsecuritytag.java
字号:
package com.presentation.viewhelper;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.util.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.w3c.dom.*;
import java.io.*;
import javax.xml.parsers.*;
public class JspSecurityTag extends BodyTagSupport {
//保存从XML文件中取到角色和页面元素的对应集合
private static ArrayList roleList;
//页面元素的名称
private String elementName;
public void setElementName(String str)
{
this.elementName=str;
}
public int doAfterBody() throws JspException{
if(roleList==null)
{
roleList=getList();
}
try{
//如果认证通过就显示标签正文,否则跳过标签正文,就这么简单
if(isAuthentificated(elementName))
{
if(bodyContent != null){
JspWriter out=bodyContent.getEnclosingWriter();
bodyContent.writeOut(out);
}else
{
}
}
}catch(Exception e){
throw new JspException();
}
return SKIP_BODY;
}
//从XML配置文件中取到角色和页面元素的对应,保存到静态的ArrayList
private ArrayList getList()
{
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
Document doc=null;
NodeList childlist = null;
String elementName;
String roleName;
int index;
ArrayList theList = new ArrayList();
try{
db = dbf.newDocumentBuilder();
}catch(Exception e)
{
e.printStackTrace();
}
try{
doc = db.parse(new File("webapps/securitytag/security.xml"));
}catch(Exception e)
{
e.printStackTrace();
System.out.println(e);
}
//读取页面元素列表
NodeList elementList = doc.getElementsByTagName("htmlElement");
for(int i=0;i<elementList.getLength();i++)
{
Element name = ((Element)elementList.item(i));
//页面元素的名称
elementName = name.getAttribute("name");
//该页面元素对应的有权限的角色的列表
NodeList rolNodeList = ((NodeList)name.getElementsByTagName("roleName"));
for(int j=0;j<rolNodeList.getLength();j++)
{
//有权限的角色的名称
//roleName = ((Element)rolNodeList.item(j)).getNodeValue();
roleName = ((Element)rolNodeList.item(j)).getAttribute("name");
theList.add(new ElementAndRole(elementName,roleName));
}
}
return theList;
}
//检查该角色是否有该页面元素的权限
private boolean isAuthentificated(String elementName)
{
String roleName = "";
//在用户登陆时把该用户的角色保存到SESSION中,这里只是直接从SESSION中取用//户角色。
roleName=(String)this.pageContext.getSession().getAttribute("rolename");
// roleList包含elementName属性为elementName,roleName属性为roleName的//ElementAndRole对象,则该角色有该页面元素的权限
if(roleList.contains(new ElementAndRole(elementName,roleName)))
{
return true;
}
return false;
}
//表示角色和页面元素的对应的关系的内部类
class ElementAndRole{
String elementName;
String roleName;
public ElementAndRole(String elementName,String roleName)
{
this.elementName=elementName;
this.roleName=roleName;
}
public boolean equals(Object obj)
{
return(((ElementAndRole)obj).elementName.equals(this.elementName)&&((ElementAndRole)obj).roleName.equals(this.roleName));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -