通过继承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 >


你可能感兴趣的:(struts2标签)