目标:通过自定义标签来实现动态的显示权限
出现的问题:没有像预期一样显示用户所拥有的权限而是将权限都显示出来了
在复写了org.apache.struts2.views.jsp.ui里的类AnchorTag并且在struts.xml中加了相对应的拦截器,但是没有起到作用
解决办法:
结果发现是在查询所有权限的时候将要求:所有权限为不是Null和不是重复的写成了null的了,从而导致了在AnchorTag中的判断是否是通用权限的时候逻辑出错了,从而引发了上面的错误
//这个类的作用就是可以起到在使用标签的时候判断用户是否拥有此权限,从而判断是否执行标签
@Override public int doEndTag() throws JspException { //当前用户 User user = (User) pageContext.getSession().getAttribute("user"); //当前的URL,如果有参数就要去掉后面的参数字符串 String privilegeUrl = action; int pos = privilegeUrl.indexOf("?"); if(pos > -1){ privilegeUrl = privilegeUrl.substring(0,pos); } if(user.hasPrivilegeByUrl(privilegeUrl)){ return super.doEndTag();//如果有权限,就正常的生成与输出<a>标签 } else{ return EVAL_PAGE;//如果没有权限,就不显示当前<a>标签,只是继续执行页面后面的代码 } }
public List<String> getAllPrivilegeUrls() {
return getSession().createQuery(
"SELECT DISTINCT p.url FROM Privilege p WHERE p.url IS NOT NULL")
.list();
}