【问题标题】:JSP/Spring MVC applicationJSP/Spring MVC 应用程序
【发布时间】:2012-09-30 08:41:45
【问题描述】:

我正在使用 JSP/Spring MVC 编写一个 Web 应用程序,并且需要根据使用它的客户自定义 UI。我需要隐藏/显示屏幕的某些部分,隐藏显示某些标签及其文本框,还需要根据不同的客户修改标签。目前,我们正在根据登录的客户通过元素和 div 控制 JSP 中的隐藏/显示。例如:

if (customer= "A")

show this

else 

hide this

随着我们添加更多客户,代码变得杂乱无章,JSP 将变得臃肿。 我想到的另一种选择是将页面拆分为多个部分并以相同的方式控制这些部分,但最终可能会导致跨 JSP 的代码重复。

例如

if (customer = "A")

jsp:include headerA.jsp

else

jsp:include genericheader.jsp

另一种选择是根据客户端编写不同的 JSP 和路由。

有没有更好的方法来处理这种情况。有人可以建议实施此类解决方案的最佳做法吗?

谢谢。

【问题讨论】:

    标签: java jsp jakarta-ee web-applications spring-mvc


    【解决方案1】:

    为每个用户选择做什么的 UI 不可能超出您的用户 A 和 B。您需要一个基于角色的身份验证和授权系统。

    由于您已经在使用 Spring,我建议您查看 Spring Security 及其基于角色的功能。有一些标签可以帮助你。

    另一种看待它的方式是,像这样的基于角色的逻辑不属于标签。我建议将它放在控制器中,让它们为你组装页面。

    另一种可能性是 SiteMesh,它允许您创建复合视图。

    还有一个:jQuery 是为操作 DOM 而生的。与 CSS 一起使用。

    【讨论】:

    • +1 到 Sitemesh。我用它在标题中显示有关已登录用户的信息或显示登录链接(如果未登录)。
    • 这些不是角色,我需要根据客户端进行区分,例如,如果 ABC 客户端登录,它是一个页面,页面上显示的特定元素带有一些隐藏或可见的 div 和如果 DEF 客户端登录,则情况有所不同。这些不是角色。
    • 然后它们是您查找该人所在组的授权 - 更多的是 Spring Security 的原因。请参阅上面的编辑。
    • 谢谢达菲莫。同样,这不是基于安全性或角色的。另一个例子是......我正在为 2 个商店创建一个 Web 应用程序以登录。例如,如果来自一家商店的人在他们的视图中登录有一些字段和一些额外的
      部分以及他们商店的标签,那么来自另一家商店的另一个人会看到不同的 UI。我是否应该根据商店维护单独的 JSP 并显示/隐藏。同样,这不是逐人控制。
    【解决方案2】:

    首先应该基于角色而不是基于客户,每个客户都会有一定的角色。许多客户可能具有相同的角色和屏幕访问权限和 UI。

    基于角色,你可以使用 Spring Secutiry 进行身份验证和授权。

    如果您需要根据客户角色使用不同的布局,最好使用一些布局管理器,例如 Tiles、SiteMesh 等。

    或使用 portlet 为不同的客户提供不同的登录视图

    【讨论】:

      【解决方案3】:

      您刚刚说如果 A 人从一个商店登录,而 B 人从另一个商店登录。讨厌说出来,但那是一个角色,无论你怎么旋转它,这都与用户授权有关。

      就你想如何实现它而言,你可以做很多事情,你可以拦截登录请求并设置一个会话变量,该变量在字符串前面确定正确的视图(即当用户登录时你得到customerA 与 customerB,因此在呈现视图时,您将检索值并呈现“customerA/index”与“customerB/index”等。

      您还可以在控制器中确定人员的角色并呈现适当的视图,尽管这会将您的用户角色与您的控制器逻辑结合起来,我认为不推荐这样做。

      如果这个应用程序有很多不同的后端,我建议你可以为每个应用程序编写一个新的后端的 portlet,而不是用每个新的商店后端来膨胀你的 Web 应用程序。

      这些只是几种方法,希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-10-08
        • 2016-08-18
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多