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

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

【问题讨论】:

    标签: jsp servlets authorization user-roles conditional-rendering


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

    另见:

    【讨论】:

    • 是否也在使用“
    • @Zack:不,不是。这只是一个通用示例。你可以在&lt;c:if&gt;里面放任何你想要的东西。
    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2021-08-31
    • 2018-03-12
    • 2015-09-02
    • 2022-11-15
    • 1970-01-01
    相关资源
    最近更新 更多