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;//不生成 与显示超链接标签 只是继续执行页面中后面的代码
}
}

修改struts2自定义标签的源代码,在原有基础上增加功能(用于OA项目权限判断,是否显示某个权限)的更多相关文章

  1. [JavaWeb基础] 012.Struts2 自定义标签使用

    在做开发中,我们会把一些比较经常使用到的代码封装起来,这样可以加快开发的速度和减少错误,并且在修改bug可以一次修改多次修复.那么在前端页面上,如果我们要经常用到公用的显示功能,并涉及到服务端逻辑操作 ...

  2. Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。

    Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...

  3. Struts2自定义标签4自定义分页标签

    第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  4. 权限管理(java+struts2(自定义标签)实现)--------->全代码演示

    地址:http://blog.chinaunix.net/uid-24343152-id-3673026.html 最近由于项目不是很紧所以总结了之前做了n遍的权限管理功能.以便之后系统copy之用. ...

  5. Struts2自定义标签3模仿原有的s:if s:elseif s:else自定义自己的if elsif else

    第一步:webroot/web-inf下简历str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  6. Struts2自定义标签重写(转)

    TagSupport的学习 1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的 ...

  7. myeclipse上down出的svn项目,文件后面不显示版本号和修改人

    找到 windows ->preferences->General->Appearance->Lable Decorations 下拉找到svn 勾选上

  8. JavaWeb学习篇之----自定义标签&&JSTL标签库详解

    今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...

  9. JSP自定义标签——传统标签

    同JSP标签一样,自定义标签主要用于移除JSP页面中的Java代码,可以看到我们在JSP中其实是禁止使用Java脚本的,任何要想通过Java代码实现的功能都必须以标签形式来处理,可以使用JSP标签,J ...

随机推荐

  1. PHP独立操作符

    & 与 ^ 位逻辑异或 $ # ! 逻辑或 ~  按位取反

  2. poj 1018(枚举+贪心)

                                                                              通讯系统 We have received an o ...

  3. Dark roads--hdoj

    Dark roads Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Su ...

  4. 【转】ios蓝牙开发学习笔记(四)ios蓝牙应用的后台处理 -- 不错

    原文网址:http://dev.ailab.cn/article-1038-220511-1.html 默认情况下,当应用进入后台或挂起时,蓝牙任务是不执行的.但是,你可以把应用声明为支持蓝牙后台执行 ...

  5. 随时随地日志Debug

    对于一个应用程序而言,Log必不可少,但是有些时候仅仅想看下输出,如果加log的话就显得比较麻烦,这个时候就用到了Debug.WriteLine("测试下,你好,非常棒,牛叉!") ...

  6. docker(部署常见应用):docker部署nginx

    上回说到centos安装docker. 这次用实战,docker部署运行常见的应用. docker常用命令 参看:docker命令大全.这里不做赘述. docker部署nginx 1.docker h ...

  7. linux Redis 5.0集群搭建

    文档结构如下: Redis cluster 是redis的分布式解决方案,在3.0版本正式推出后,有效的解决了redis分布式方面的需求:当遇到单机内存,并发,流量等瓶颈是,可以采用cluster架构 ...

  8. 数据科学的完整学习路径(Python版)

    转载自:http://python.jobbole.com/80981/ 英文(原文)连接:https://www.analyticsvidhya.com/learning-paths-data-sc ...

  9. 从Oracle同步数据到SQLServer——大小写敏感设置

    Oracle默认是大小写敏感,而SQLServer默认大小写不敏感, 尤其是涉及主键字段时,注意请提前设置SQLServer对应的数据库表为大小写敏感,不然会报主键冲突的错误. 设置表内大小写敏感 A ...

  10. mysql5.7 设置密码

    5.7版本的MYSQL的用户表的密码字段与以往版本有所区别, 不再是password字段 而是authentication_string字段. 请注意修改密码: vim  /opt/mysql_d/m ...