在页面加载之前隐藏锚标记

时间:2011-09-22 14:41:20

标签: java javascript jsp javascript-framework jsp-tags

我有一个权限网址列表,这些网址是指向某些网页的链接,此列表来自数据库。 现在,整个应用程序中都有jsp页面,并且它们具有显示的某些链接。这些jsps是较旧的jsps,代码就在那里。 现在,根据我从数据库中检索的权限列表,我想显示或隐藏这些链接。

使用javascript片段或jsp或组合可以放入所有jsps中是否有任何集中的方式来执行此操作?

这些网址的授权部分已经处理好了,除了实际进入每个jsp和签入会话的方式之外,应该注意显示通常是锚标记的URL。

5 个答案:

答案 0 :(得分:0)

我所做的是创建我自己的标记定义,该定义包含安全角色,并在角色验证通过时包含或排除页面中的链接。如果你在javascript中执行它并且只隐藏链接,你仍然可以检查页面并访问网址..希望这有帮助

答案 1 :(得分:0)

默认情况下,您可以使用单个CSS表达式隐藏所有不显示“show”类的锚标记:

a:not(.show) {
    display: none;
}

然后在你希望展示它们的那一点(我会说你的文件就是文档就绪函数),只需添加CSS类“show”,这将使上面的规则无效。

JavaScript的:

var anchors = document.getElementsByTagName("a");
for (var i = 0; i < anchors.length; i++) {
    anchors[i].className = "show";
}

答案 2 :(得分:0)

使用JSP标记库。在taglib中包装URL链接。例如,spring security有类似的东西

<security:authorize access="hasRole('ROLE_ADMIN')">
   // display something
</security:authorize>

在taglib中,您将检查用户是否已登录并且他具有某些权限或角色,如果他有,您将编写或跳过它...

答案 3 :(得分:0)

如果您将允许页面的javascript数组发送到浏览器,则可以遍历所有链接以检查它们是否在列表中。你可能有一些不安全的链接,所以你不得不以某种方式处理它们。

答案 4 :(得分:0)

如果不浏览每个页面,您可以设置Java和JavaScript的组合来完成此任务。

我个人会使用jQuery。根据权限级别设置JavaScript变量,然后使用jQuery遍历所有锚点/链接以解析链接名称或公共属性以删除或隐藏它们。

var permissionLevel = <%=bean.getPermissionLevel()%>

switch(permissionLevel ){     
    case 0:
        $("a").each(function(){
            var link = $(this).attr("href");
            if(link == 'myLinkName'){
                $(this).remove();
            }
        })
}

在此示例中,我使用数值作为权限级别。您可以轻松地使用字符串值并使用if语句而不是case状态,但这显示了一般的想法。