自定义标签实现网站权限的控制

在编写html文档时,有些功能用已有的标签不能完成或是用已有的标签不能很简单的达到用户的要求,这时就需要程序员自己编写相应的标签来完成指定的功能
  这里笔者以网站权限的控制来着手讲解自定义标签的实现方法及其好处,希望对喜欢建站的读者有一定的帮助
  在网站建设过程中相信很多开发者都会为权限的控制而烦恼,虽然理论上来说,为每一种角色都创建一套网页的想法是可行的,可是这在实际的操作中是难以令人接受的,因为可能两个角色的功能只有细小的差别而却要建立两套页面,这额外的工作量及时间的开销都是开发都不能忍的,而且最重要的是,后期的维护工作很难进行,所以开发一套对不同角色来说都通用的接口网页就很重要了
  所以现在的要求就是既要实现通用,又能使得不同的用户能看到不同的视图(注意这里的视图显示控制机制和MVC中控制机制是不同的,MVC中的控制是由C控制定位到不同的页面来实现不同视图的显示,而这里是同一页面的内容根据用户的角色来显示,其本所是不一样的),或许大多数的读者首先想到方法就是在页面中加入大量的if
else语句,进行用户身份的判定,然后进行页面内容的显示,当然这也是一种方法,不过这种方法在操作起来显得很是麻烦,而且当我的权限验证机制有所改变时,那么我就得修改所有的页面中相应的代码,更新维护起来相当的麻烦
  这里笔者通过自定义标签的形式来完成权限及页面显示内容的控制,使用起来更加的灵活,而且维护起来也方便,具体实现方式如下

步骤一、新建一个tld文件,这里命名为privilege.tld,这个文件主要实现自定义标签的定义,注意其中的红色标的部分,读者可以自己修改取值,而蓝色标注的部分,则是处理这个标签的类所在的路径及其名称,读者可以根据实际,自己修改这个取值,operateID表示操作的ID,roleID表示用户的角色编号,mark表示掩码,用来实现对某一角色部分功能的屏蔽,文件内容如下
<?xml
version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun
Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
   
<tlibversion>1.0</tlibversion>
   
<jspversion>1.1</jspversion>
   
<shortname>privilege</shortname>
   
<tag>
        <name>operate</name>
   
    <tagclass>com.tag.pub.PrivilegeTag</tagclass>
   
    <bodycontent>JSP</bodycontent>
<!--这里如果设为empty,则无body-->
       
<attribute>
           
<name>operateID</name>
   
       
<required>true</required>
       
   
<rtexprvalue>true</rtexprvalue>
   
    </attribute>
       
<attribute>
           
<name>roleID</name>
   
       
<required>true</required>
       
   
<rtexprvalue>true</rtexprvalue>
   
    </attribute>
       
<attribute>
           
<name>mark</name>
   
       
<required>true</required>
       
   
<rtexprvalue>true</rtexprvalue>
   
    </attribute>
   
</tag>
</taglib>
步骤二、新建一个标签的处理类,这里我是建在src/com/tag/pub包下面,且文件的名为PrivilegeTag.java,注意蓝色标注的部分要和上面代码中蓝色标注的部分相一致,否则会出现错误,然后在文件中红色标注的部分,根据传进来的operateID,roleID,mark(这三个参数不需要用户手动调用函数进行设置,java的反射机制能自己调用相应的set方法进行这个参数值的设置)参数查库进行判断用户是否有权限进行当前的操作,文件的内容如下:
package
com.tag.pub;
 
import javax.servlet.jsp.JspException;
import
javax.servlet.jsp.tagext.TagSupport;
 
public class
PrivilegeTag  extends TagSupport {
    private static
final long serialVersionUID = -532517444654109642L;
   
private String operateID;
    private String
roleID;
    private String mark;
    public
void setMark(String mark) {
        this.mark =
mark;
    }
    public void setRoleID(String
roleID) {
        this.roleID =
roleID;
    }
    public void
setOperateID(String operateID) {
       
this.operateID = operateID;
    } 
   
public int doStartTag() throws JspException {
   
    if(在这里进行权限的判断)
   
        return
EVAL_PAGE;
        return
SKIP_BODY; 
    } 
}
步骤三、 对于页面内可展现给指定用户而又需要进行权限控制的链接操作,应该使用<privilege:operate operateID="operid"
roleID="roleid"> </privilege:operate>标签对包含起来,以实现不同身份的人访问该页面时会有不同显示的目的,标签中operateID取遵循以下的规范:模块名_操作,roleID取值为用户的角色。如我在一个查看页面中AAA_view.jsp中,可能呈现给用户的操作有add,del,fix三项操作,则我可以以下的方式将链接呈现给用户:

<privilege:operate
operateID="AAA_add" roleID="roleid">添加</privilege:operate>

<privilege:operate
operateID="AAA_del" roleID="roleid">删除</privilege:operate>

<privilege:operate operateID="AAA_fix"
roleID="roleid">修改</privilege:operate>

即编写代码时不考虑用户是不是有这个权限,而只考虑该页面中的该操作是不是需要权限控制即可,这样不同的用户在访问时,就会看到不同的功能了,如甲用户有添加和删除的功能,则他访问该页面时相应的地方就会显示:添加删除的链接,而对于乙用户,只有修改的权限,则他访问该页面时相应的地方就会显示:修改的链接,其它的他没有操作权限的链接都不会被显示或是执行。

  最后要说明的是这里只是提供给大家有一个思路,因为具体操作起来还需要后台数据库中及表的支持,这里不支持附件的上传,而如果将全部的代码都粘贴过来显然是不现实的,所以读者可以根据这个思路自己进行设计,如果实现的时候有什么问题的话,可以给我留言并留下联系方式,我可以将实现的工程文件发给你

本文摘自:http://blog.sina.com.cn/s/blog_7b62c61c0100vn3e.html

时间: 2024-07-31 14:27:03

自定义标签实现网站权限的控制的相关文章

自定义标签 + shiro 实现权限细粒度控制

这里我们是使用shiro来实现登录验证,授权等操作,然后利用自定义jsp标签来实现权限菜单的细力度控制.所谓的细粒度控制,就是根据用户登录权限的不同,显示不同的菜单,例如,用户如果有添加用户,修改用户的权限,我们就显示这个俩个菜单,然后我们并不显示删除用户的菜单. 如何自定义jsp标签 1.定义一个权限标签,命名为mytag.tld <?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="

Java web自定义标签按钮级别权限控制完美诠释(jplogic 快速开发平台)

接下来跟大家聊聊JavaWeb中权限控制,往大的方向说可以聊聊整合应用系统中的权限控制.在聊权限控制之前先跟大家聊聊RBAC.那么什么是RBAC呢?RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联的,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色.角色可依新的需求和系统的

编写自定义标签

1.8 编写自定义标签 一.作用: 自定义标签主要用于移除Jsp页面中的java代码. ?   控制jsp页面某一部分内容是否执行. ?   控制整个jsp页面是否执行. ?   控制jsp页面内容重复执行. ?   修改j页面内容输出. 二.标签体系:传统标签和简单标签: 1. JspTag接口 JspTag接口是所有自定义标签的父接口,它是JSP2.0中新定义的一个标记接口,没有任何属性和方法.JspTag接口有Tag和SimpleTag两个直接子接口,JSP2.0以前的版本中只有Tag接口

Java jsp 自定义标签

1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签) 1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类 /** * 标签处理器类 * @author APPle * 1)继承SimpleTagSupport * */ public class ShowIpTag extends SimpleTagSupport{ private JspContext context; /** * 传入p

一、JSP标签介绍,自定义标签

p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-size: 16.0000pt } h1 { margin-top: 17.0000pt; margin-bottom: 16.5000pt; margin-left: 21.6000pt; text-indent: -21.6000pt; page-break-after: avoid; page-

权限(二)--权限的控制(过滤器与自定义标签)

一. 接着上一篇的说 权限(一)--用户.权限组以及权限的分配 权限的控制分为两块: 1.页面的控制(没用权限的不让他看到页面) 2.过滤控制(就算知道url,没有权限也不让进) 在项目中,都是由一个人来负责权限部分的编写,然后其他人的活中多少会涉及到一些权限相关的. 所以,权限控制的通用性是非常重要的(总不能每次写到就找写权限部分的那个人,问他怎么弄). 测试demo包: 权限控制Demo 二.过滤器 在访问url之前,进行一次过滤,同时查看当前用户是否有访问该url的权限. 为了保证通用性,

整理一份jsp自定义标签以及权限控制标签

jsp自定义标签使用场景因地制宜,可以实现自定义的标签输出功能也可以实现权限的管理 1:先定义标签类 1-1:页面输出标签 package com.suyin.web.jspsectag; import java.io.IOException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; public cla

struts自定义拦截器--登录权限控制

说明:该自定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.总体的步骤: (1).定义拦截器类.LoginInterceptor(完成登录拦截) 方式1:实现com.opensymphony.xwork2.interceptor.Interceptor接口并覆写方法. 方式2:继承com.opensymphony.xwork2.interceptor.AbstractIntercep

java自定义标签 权限

<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://