通过继承Struts2标签,实现页面元素的显示权限控制

通过Struts2拦截器实现权限系统,网上有太多的例子.

这里记录的只是页面上某个连接能否显示的控制.

场景: 用户没有权限执行"修改记录"这个操作.那么,在页面中,"修改记录"这个链接也不应该出现

环境: Struts2.1.8 其实哪个版本无所谓

我的实际环境: Eclipse3.5 + jboss Tool + EJB3 +mysql5

步骤:

1. 在WEB-INF 下新建一个 tld文件,我这里命名是ems-tag.tld.内容拷贝自Struts-core.jar/meta-inf/目录下

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
  <description><![CDATA["带权限控制的标签 :继承了Struts2的页面标签,
  	用作权限组件的UI判定
  ."]]></description>
  <display-name>"权限控制UI Tags"</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>ems</short-name>
  <uri>/ems2-tags</uri>
  <tag>
    <description><![CDATA[呈现一个 HTML href 元素  ]]></description>
    <name>a</name>
    <tag-class>cn.vs9.ems.web.tags.ui.AnchorTag</tag-class>
    <body-content>JSP</body-content>
以下若干代码略过,完全和Struts2的一样

....
  </tag>

2. 继承标签类: org.apache.struts2.views.jsp.ui.AnchorTag

/** 重写的Struts2 Link标签
* <ems:a action="${ActionUrl}" >链接</ems:a>
*
* 标签作用,在执行url之前判定是否有"权限"在页面呈现 执行链接.
* "权限"依赖此用户组是否有权限执行此Action
*/
public class AnchorTag extends org.apache.struts2.views.jsp.ui.AnchorTag {
/**
* 是否通过授权.默认否
*/
private boolean isAccess = false;


@Override
public int doEndTag() throws JspException {
System.out.println(
"doEndTag");
if(!isAccess){
return SKIP_BODY;
}
return super.doEndTag();
}


@Override
public int doStartTag() throws JspException {
System.out.println(
this.action); //根据url判断

//这里替换成具体的权限判断
isAccess = true;


if(!isAccess){
return SKIP_BODY;
}
return super.doStartTag();
}


}

3. 在页面试用

现在运行一下,试着切换标签类中的isAccess =true | false 看效果吧

其他标签也可以使用此方式进行.
目前我实现了a标签和action标签
,项目基本就够用了
思路
:
把页面分页为多个视图
.
通过
<ems:action name="user_list" executeResult="true" namespace="/json"/> 的方式 .可以动态实现页面部件的组合
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="ems" uri="/ems2-tags" %>

<ems:a action="/data/user_update.action?entity.id=1">修改用户</ems:a>


原文地址:https://www.cnblogs.com/jifsu/p/2073485.html