• 权限管理之基于ACL的实现:自定义JSTL函数实现即时认证


    实现即时认证(即只有拥有相应的权限,才能做相应的操作)

    经常用在,在JSP页面上,调用JSTL自定义函数做判断,显示相应的菜单或者功能按钮,比如只有管理员登陆时才显示“删除”按钮,从而完成权限的即时认证。


     通过这个例子,说明JSTL自定义函数是如何实现页面段即时认证的,同时也说明自定义一个JSTL函数的步骤。

    定义JSTL函数的定义和使用过程

    第一步:定义类和实现方法(方法必须是public static)

     

    /**
     * JSTL函数,主要功能是可以完成权限的即时认证
     * @author Administrator
     *
     */
    publicclass SecurityFunctions {
     
    privates tatic AclManager aclManager;
     
    publicstatic boolean hasPermission(int userId,String resourceSn,int permission){
     
    returnaclManager.hasPermissionByResourceSn(userId, resourceSn, permission);
    }
     
    //这个方法不能定义为static,因为这将导致spring无法注入
    publicvoid setAclManager(AclManager aclManager) {
    SecurityFunctions.aclManager= aclManager;
    }
    }

    需要注意的是,准备实现JSTL自定义函数的java类方法,必须使用 public static声明,因为通过这样的声明,这个方法在程序启动后就被加载到内存的,而不是等到实例化时才被加载到内存。


    第二步:编写自定义tld文件,并且将此文件放到WEB-INF或WEB-INF任意子目录下 

     

    <?xmlversion="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://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
      version="2.0">
       
      <tlib-version>1.0</tlib-version>
      <short-name>my</short-name>
     <uri>http://www.bjsxt.com/oa/functions</uri>
     
      <function>
        <name>hasPermission</name>
       <function-class>com.bjsxt.oa.web.SecurityFunctions</function-class>
        <function-signature>
    booleanhasPermission(int, java.lang.String,int)
    </function-signature>
      </function>
    </taglib>


    通过这个自定义tld文件,告诉taglib我们自己定义了function,相当于是taglib的扩展部分。



    第三步:在web.xml文件中注册tld 

      

    <jsp-config>
                     <taglib>
                             <taglib-uri>http://www.bjsxt.com/myfunctions</taglib-uri>
                             <taglib-location>/WEB-INF/my.tld</taglib-location>
                     </taglib>
      </jsp-config>



    第四步:使用

     

    <%@ taglib prefix="my" uri="http://www.bjsxt.com/myfunctions" %>
     
    <c:iftest="${my:hasPermission(login.id,'person',3) }">
    <ahref="#" onclick="del('person.do?method=del&id=${person.id}');">删除</a>
    </c:if>

    根据loginId判断该user是否有足够的权限,进行有选择的显示“删除”命令。

    小结

    本文介绍了如何自定义jstl函数,并通过自定义jstl函数在jsp页面做即时认证,只有通过认证之后,才显示相应的菜单或者功能按钮。


  • 相关阅读:
    openlayers方法总结
    AJAX 数据库实例
    AJAX 请求服务器
    得到XMLHttpRequest对象
    AJAX 简介
    AJAX 服务器端的脚本
    HTTP GET 最多发送100个字符
    AJAX XMLHttpRequest 对象
    Dictionary、ArrayList、Hashtable和数组 Array 的区别
    AJAX 请求实例
  • 原文地址:https://www.cnblogs.com/pangblog/p/3283284.html
Copyright © 2020-2023  润新知