zoukankan      html  css  js  c++  java
  • 通过继承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>


  • 相关阅读:
    1.Spring MVC详解
    servlet的九大内置对象
    Hibernate设置事务的隔离级别
    wamp下php报错session_start(): open(d:/wamp/tmpsess_ku776hvb06ko4lv9d11e7mnfj1, O_RDWR) failed: No such file or directory
    json_decode()相关报错
    wamp下var_dump()相关问题
    es6箭头函数内部判断
    Json数组对象取值
    npm指向淘宝源
    APICloud之封装webApp
  • 原文地址:https://www.cnblogs.com/jifsu/p/2073485.html
Copyright © 2011-2022 走看看