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

来源:互联网 发布:网络磁盘阵列 编辑:程序博客网 时间:2024/06/13 07:31

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

经常用在,在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页面做即时认证,只有通过认证之后,才显示相应的菜单或者功能按钮。


原创粉丝点击