OA项目在做权限判断时  原始方式:

现在完成的功能 :通过改变struts2自定标签源代码   在原有的基础上  增加判断权限的功能  而页面上使用标签的方式 还是下图

步骤:

打开文件

搜索<name>a</name>

找到该标签对应的类全路径  然后打开源码

首先明确的是:源码是不可以修改的   但是我们知道项目中类的加载顺序是  现在src下找  如果找不到  才会去jar文件中寻找类

所以 采取的办法 :把源代码复制  然后在src下创建和源代码相同的包名以及类名

在这里边添加相应的功能   最终实现增强struts2标签的功能  主要覆写父类中一下的两个方法

doEndTag()的作用是 :标签执行完之后  将要进行的动作   doStartTag()的作用是:标签执行前你想做什么事

我们需要用到标签中的action属性中的内容  所以修改doEndTag()中的代码即可,一下是部分代码:

 private static final long serialVersionUID = -1034616578492431113L;

    protected String href;
protected String includeParams;
protected String scheme;
protected String action;
protected String namespace;
protected String method;
protected String encode;
protected String includeContext;
protected String escapeAmp;
protected String portletMode;
protected String windowState;
protected String portletUrlType;
protected String anchor;
protected String forceAddSchemeHostAndPort; /*
* 开始增加判断是否显示或者不显示代码 覆写父类中的方法
* (non-Javadoc) --付强修改
* @see org.apache.struts2.views.jsp.ComponentTagSupport#getBean(com.opensymphony.xwork2.util.ValueStack, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public int doEndTag() throws JspException {
//当前登录的用户
User user=null;
user=(User) pageContext.getSession().getAttribute("user");
//当前准备显示的权限对应的url 数据库中存的url是带着'/'的 /xxx.action
String privUrl="/"+action; //找到URL中?的位置 xxx.action?a=1&b=2;
int pos=privUrl.indexOf("?");
if(pos>-1){//找到?号的位置
//截取到字符串 截取?前面的内容
privUrl=privUrl.substring(0,pos);
}
//去掉uI后缀
if(privUrl.endsWith("UI")){//表示该字符串以UI结尾
privUrl=privUrl.substring(0,privUrl.length()-2);
} // TODO Auto-generated method stub
if(user.hasPrivilegeByName(privUrl)){//这里判断 有权限吗 如果有 还按照原来的流程走 执行父类的方法 显示超链接
return super.doEndTag();//正常的生成并显示超链接标签 并继续执行页面中后面的代码
}else{//否则 没有权限
return EVAL_PAGE;//不生成 与显示超链接标签 只是继续执行页面中后面的代码
}
}

最新文章

  1. Base64加密算法封装
  2. ISO20000
  3. .NET (一)委托第一讲:什么是委托
  4. 如何查询 Oracle 11g日志
  5. com学习(四)2——用 ATL 写第一个组件(vs2003)
  6. 【Shell脚本学习15】shell printf命令:格式化输出语句
  7. ThinkPHP 中使用 PHPMailer 发送邮件 支持163和QQ邮箱等
  8. HTML5储存
  9. XCode4 下制作Framework的方法
  10. html表单提交的几种方法
  11. [转]5个JavaScript面试题
  12. Windows环境下Mysql如何快速导入或恢复表为innodb的数据
  13. Maven常见错误以及解决方案【转载】
  14. &quot;逃离北京&quot;的这些年 2
  15. 【Monkey】Monkey获取包名的方式
  16. Linux下通过 rm -f 删除大量文件时报错:Argument list too long
  17. python利用opencv合成模糊图像
  18. jsp/servlet学习五之jsp表达式语言初窥
  19. android开发(47) 使用xml drawable 实现 局部圆角,可用作圆角边框
  20. open-falcon之graph

热门文章

  1. Fitnesse Slim的使用
  2. [iOS]UITableViewController完毕收回键盘操作
  3. PHP自己定义函数及数组
  4. c22---枚举
  5. Android下添加新的自定义键值和按键处理流程【转】
  6. k8s Job、Cronjob 的使用
  7. poj 1161 Floyd+枚举
  8. C#中关于XML与对象,集合的相互转换
  9. VC++抛出自定义编译期异常的指令
  10. 如何激活优动漫PAINT,获取优动漫PAINT序列号