2011-09-22 116 views
0

之前,我有权网址指向链接到特定页面,该列表来自数据库的列表。 现在,整个应用程序都有jsp页面,并且它们显示了某些链接。这些jsps是较老的jsps,代码都在那里。 现在,基于我从数据库中检索的权限列表,我希望显示或隐藏这些链接。隐藏锚标签的页面加载

是否有这样做无论是使用JavaScript代码或JSP或组合,可以把所有的JSP任何集中的方式?

这些URL的授权部分已经被关注,除了实际进入每个jsp和检入会话的方式之外,通常需要关注显示通常是锚标签的URL。

回答

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语句而不是案例状态,但这显示了总体思路。

+0

谢谢,我会试试看,并会让你知道 – user546352

+0

我在$(document).ready(function()中添加了类似的函数,它在常规的jsps中工作正常,但是这个函数放在头文件jsp中在Firefox中工作,并在IE中,它抱怨空对象。是否有任何替代文件准备功能?所以我可以概括它,并把它放在头? – user546352

+0

可能是<%= bean。getPermissionLevel()%>为null,请尝试用引号括起来,以便在页面加载时,如果bean或权限级别为null,则只需在JavaScript中有一个空字符串,否则就会格式错误。您也可以考虑一些基于假设bean或值为null的逻辑来将默认值设置为javascript权限级别。 –

0

我所做的就是创建一个采取安全角色和包括或者如果角色验证通过排除在页面链接我自己的标签定义。如果您在JavaScript做到这一点,只有隐藏链接,您仍然可以检查的页面和访问的URL ..希望这有助于

0

你可以让所有的锚标签,而无需使用一个CSS表达式默认是隐藏的“秀”类:

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

,然后在你想向他们展示点(我想你的情况说,这将是文件准备好功能),只需添加CSS类“秀”,这会作废以上规则。

的JavaScript:

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

谢谢你,我也会试试这个,并会让你知道它是怎么回事。 – user546352

0

使用JSP标签库。将URL链接包装在taglib中。例如春季安全具有这样的事情

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

,您将检查用户是否登录,他有一定的权限或角色,如果他有你要么写还是跳过吧...

0

如果你把你的允许页面的JavaScript数组到浏览器,然后你可以遍历所有的链接检查,看看它们是否在列表中。你可能有一些不安全的链接,所以你必须以某种方式处理这些链接。