我有一个权限网址列表,这些网址是指向某些网页的链接,此列表来自数据库。 现在,整个应用程序中都有jsp页面,并且它们具有显示的某些链接。这些jsps是较旧的jsps,代码就在那里。 现在,根据我从数据库中检索的权限列表,我想显示或隐藏这些链接。
使用javascript片段或jsp或组合可以放入所有jsps中是否有任何集中的方式来执行此操作?
这些网址的授权部分已经处理好了,除了实际进入每个jsp和签入会话的方式之外,应该注意显示通常是锚标记的URL。
答案 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状态,但这显示了一般的想法。