如何根据用户角色有条件地显示 JSP 页面的元素

Posted

技术标签:

【中文标题】如何根据用户角色有条件地显示 JSP 页面的元素【英文标题】:How to conditionally display elements of JSP page depending on user role 【发布时间】:2012-03-08 05:47:22 【问题描述】:

如何在网页上加载菜单取决于登录用户?我想让网站在登录前显示一些菜单,登录后它将显示更多菜单,这取决于登录用户,如果管理员登录,那么如果普通用户登录,则会出现一些管理菜单,然后会添加一些不同的菜单。我想使用 JSP/Servlet 构建这个项目。当用户单击任何菜单总页时,不会重新加载,只会更改某些部分,其中显示此菜单的详细说明。

【问题讨论】:

【参考方案1】:

您可以在不同的 jsps 中拥有不同的菜单,然后根据登录用户包含这些 jsps。

比如……

<%if(userRole.equals("admin"))%>
   <jsp:include page="../menu/admin_menu.jsp" />
<%%>
<%if(userRole.equals("user"))%>
   <jsp:include page="../menu/user_menu.jsp" />
<%%>

【讨论】:

请注意,这是一种相当老派的 JSP 编写方式,并且自大约十年前发布的 JSP 2.0 以来官方不鼓励这种方式。另见***.com/questions/3177733/… @BalusC 确实是这样,但如果他不能使用 JSTL,这对他有用。你关于使用 JSTL 的帖子非常好,我已经看了很多次,并试图说服我的老板这样做,但还没有成功,所以我坚持使用好的 ole scriptlet。 @Zack Macomber 在验证用户并加载正确页面时使用此程序登录并正确加载所有菜单。现在我希望当用户/管理员单击菜单时,总页面不会仅重新加载某些部分将显示详细信息,你能帮帮我吗?我希望当用户向下滚动页面数据时,我不希望所有数据都被完全加载。请帮助我。 @moin - 我知道使总页面不重新加载的唯一方法是使用 AJAX - 你听说过 AJAX 吗?此外,对于向下滚动页面问题,您也可以使用 javascript 和 AJAX。如果您需要进一步的帮助,我建议您针对这些问题打开其他 *** 问题。【参考方案2】:

您可以只使用JSTL 以编程方式控制JSP 的html 输出中的流程。您可以通过HttpServletRequest#isUserInRole() 查看当前登录用户的角色,它返回boolean

当您使用 Servlet 3.0 时,您还可以利用新的 EL 2.2 对使用参数调用方法的支持。所以,应该这样做:

<c:if test="$pageContext.request.isUserInRole('admin')">
    <p>This will be displayed only if the user has the role "admin".</p>
</c:if>
<c:if test="$pageContext.request.isUserInRole('guest')">
    <p>This will be displayed only if the user has the role "guest".</p>
</c:if>

另见:

How to disable GET requests to JSP page? Restrict JSP/Servlet access to specific users only

【讨论】:

是否也在使用“ @Zack:不,不是。这只是一个通用示例。你可以在&lt;c:if&gt;里面放任何你想要的东西。

以上是关于如何根据用户角色有条件地显示 JSP 页面的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何根据用户角色Angular 4显示/隐藏元素

在jsp页面中如何获取到当前登录用户的角色id

如何根据用户的角色创建具有不同显示的视图?

如何根据用户的操作系统有条件地渲染 ReactJS 内容

如何根据用户的操作系统有条件地呈现ReactJS内容

根据用户角色渲染 JSF 组件