【问题标题】:Hiding of anchor tags before the page load在页面加载之前隐藏锚标记
【发布时间】:2011-11-22 22:04:00
【问题描述】:

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

是否有任何集中的方法可以使用 javascript sn-p 或 jsp 或可以放入所有 jsps 的组合?

这些url的授权部分已经注意了,通常是锚标记的url的显示应该注意,而不是实际进入每个jsp并签入会话的方式。

【问题讨论】:

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


    【解决方案1】:

    您可以使用单个 CSS 表达式默认隐藏所有没有“显示”类的锚标记:

    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】:

    无需浏览每个页面,您就可以设置 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 状态,但这说明了大体思路。

    【讨论】:

    • 谢谢,我会试试的,会告诉你的
    • 我在 $(document).ready(function() 中添加了类似的函数,它在常规 jsps 中运行良好,但是同样的函数放在 header jsp 中它在 firefox 和 IE 中不起作用抱怨空对象。是否有任何替代文档就绪功能?所以我可以概括它并将其放在标题中?
    • 可能是 为空,请尝试将其括在引号中,这样如果页面加载时 bean 或权限级别为空,则只有一个空字符串在你的 javascript 中,否则它是格式错误的。您还可以考虑一些逻辑,基于 bean 或值为 null 的假设,将默认值设置为 javascript 权限级别。
    • 标头 jsps 中缺少 jmesa 库,然后是导致冲突的 protype.js。谢谢您的想法..!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      使用 JSP 标签库。将 URL 链接包装在 taglib 中。例如 spring security 有这样的东西

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-22
          • 2017-08-31
          • 1970-01-01
          • 2015-10-19
          • 1970-01-01
          相关资源
          最近更新 更多