如何根据用户角色有条件地显示 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【讨论】:
是否也在使用“<c:if>
里面放任何你想要的东西。以上是关于如何根据用户角色有条件地显示 JSP 页面的元素的主要内容,如果未能解决你的问题,请参考以下文章