权限管理之基于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页面做即时认证,只有通过认证之后,才显示相应的菜单或者功能按钮。


原文地址:https://www.cnblogs.com/pangblog/p/3283284.html