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