您的位置:首页 > Web前端 > JavaScript

自定义JSP标签自动完成对页面按钮做权限拦截处理

2017-10-31 09:41 651 查看
分献IT 2017-10-23 12:03

前提

许多后台系统的页面是使用JSP页面来编写的,在后台系统权限管理逐渐完善的过程中,就会引申出这个需求来:系统已经支持了指定请求的权限控制,能否在页面加载时就对无权限处理的按钮或链接进行隐藏,每次点击后提示无权限操作,这种体验实在是不好。

方案

答案是肯定可以支持的,而且实现起来也很容易。自定义一套jsp页面的标签,校验当前用户是否有某个权限点的访问权限作为标签的后台处理逻辑就可以了。

Show me the code

接下来给出代码实现及核心注释,个别方法需要自己实现,比如获取当前用户id、判断一个用户是否有权访问某个权限点,这些方法各个系统是不同的。

首先定义一个后台处理标签渲染逻辑的类,同时继承RequestContextAwareTag类。有的学习教程写的是继承TagSupport,本质上是一样的,RequestContextAwareTag继承了TagSupport,并增加了获取了RequestContext的类,方便获取当前request等内容。

之后需要定义JSP页面使用的标签 acl-taglib.tld,习惯放在 /WEB-INF/tld 路径下。这个核心是指出标签逻辑处理的类及参数说明



接下来在项目的web.xml里进行taglib的配置,注意taglib-location 要和实际中放置的位置一致



使用

这些写好之后,接下来就可以在JSP页面使用了。

首先,使用标签时,JSP页面会要求你引入对应的taglib,这里需要注意uri的对应

<%@taglib prefix="acl" uri="/acl" %>

接下来就是在给指定的按钮配置标签和权限点啦,举个例子(这里假设我们举例子的按钮对应的权限点标识是 ACL0001):

<acl:checkPermission code="ACL0001">

<input type="submit" name="submit" > 更新 </input>

</acl:checkPermission>

当然了,这里除了可以放置按钮外,任何HTML的片段都可以放到标签里,这里的后台逻辑是只关心当前用户是否有权访问配置的权限点,有权访问时才会输出标签里的HTML片段。使用时注意别把HTML片段对应的权限点标识搞错就可以了

延伸

如今,越来越多的系统采用前后端分离的架构,这时该如何在页面渲染时不展示无权操作的按钮和链接呢,这里给个简单的方案:

首先后台提供一个根据权限点标识(要支持多个权限点标识一起校验)检查当前用户是否有权访问的接口,前台对于需要做权限校验的按钮先设置为不展示,然后在页面加载时发送请求到后台判断相关的权限标识是否可访问,前台拿到结果后对于有权访问的按钮和连接进行展示,无权访问的直接移除对应的dom元素。

这样一来,效果就和权限标签做的事情是一样的了,只是多了个后台请求,这个请求即使被使用的人发现修改也没什么影响,因为正常每个请求还都会权限系统拦截住。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: