我想根据登录用户更改主页菜单。我如何在 Spring MVC 中做到这一点?

Posted

技术标签:

【中文标题】我想根据登录用户更改主页菜单。我如何在 Spring MVC 中做到这一点?【英文标题】:I want to change the home page menu depending on the login user. How do i do it in Spring MVC? 【发布时间】:2013-04-17 18:55:21 【问题描述】:

我可以使用 Spring-MVC 登录。 现在我想根据登录的用户更改菜单。 如何使用 Spring MVC 控制器将登录用户名传递到我的主页? 这样我就可以使用该用户名并根据登录名更改菜单? 是否有任何可用的框架? 如果我想在成功登录后将一组对象(其中将包含分配给登录用户的操作)发送到我的主页怎么办?

有没有更好的办法?

任何建议将不胜感激。需要帮助。

【问题讨论】:

【参考方案1】:

如果你想基于角色来处理这个,那么spring security提供了jsp taglib来处理这个。

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/taglibs.html

例子

<sec:authorize access="hasRole('supervisor')">

This content will only be visible to users who have
the "supervisor" authority in their list of <tt>GrantedAuthority</tt>s.

</sec:authorize>

【讨论】:

这将是一些解脱。一定会搜索它并带着一些问题回来。 如果我想为某些页面授权,上述方法会很好。授权100个jsps怎么样?我不能从一些应用程序上下文文件或属性文件中制作它吗? 我不知道它这么大。您当然可以进行配置,将角色映射到属性文件、xml 文件甚至数据库中的菜单。根据此配置,您将知道某个角色可以显示哪些菜单。【参考方案2】:

除了 Bhushan 的回答之外,您还可以使用自定义 UserDetails 类来存储与经过身份验证的用户有关的信息,并使用 model.put("myParamName", myParam); 将值从控制器类传递给模型

然后,在 JSP 中,无论有无 authorize 标签,您都可以使用 $myParam 引用模型属性。请注意,这不仅限于纯 HTML 内容;您也可以以这种方式传递 javascript —— 请注意,虽然传递的内容可能是您喜欢的任何数据类型(无论如何,JSP 可以处理),但最终呈现时它将被视为字符串,所以您必须转义字符并包含换行符和/或制表符以获取冗长的内容和正确的格式。例如:

MyController.java

. . .

String myJavascript = "<script>\n\tvar myVar = \"Hello Dheeraj!\";\n\talert(myVar);\n</script";
model.put("someJavascript", myJavascript);

. . .

myPage.jsp

$someJavascript

现在,当调用该页面时,客户端将看到以下内容:

. . .

<script>
    var myVar = "Hello Dheeraj!";
    alert(myVar);
</script>

您当然也可以传递数组等,并循环遍历项目以构建 &lt;select&gt; 元素等。用户特定的逻辑可能驻留在您的控制器类中(或从控制器类中调用)。

【讨论】:

您能否分享一些链接,我可以在其中找到如何将 java 脚本从控制器发送到我的 jsp?我可以使用 ajax 将包含在我的 java 脚本中的 JSON 集合发送到控制器,就像您在示例中显示的那样?所以我可以在我的jsp页面中显示我从控制器发送的json集合中的一些数据? Here 是将信息放入模型并检索它的一个非常基本的示例。我使用'model.put("keyName", object),而这个例子使用'model.addObject("keyName", object)',还有'model.addAttribute("keyName", object)';我不确定这些有何不同(我希望“addAttribute”基于“@ModelAttribute”注释,但我不确定)。您可以将 Javascript 作为字符串传递(如我的示例中所示)。 肯定会尝试并回答一些问题。 假设我们像上面的例子一样在 key 和 pain 中设置一些值:- model.put("someJavascript", myJavascript);我可以在java脚本中检索它吗?而不是在 JSP 中? 是和不是。 JSP 将接收发送给模型的 POJO。这将适当地呈现为纯文本(基于您的 JSP 逻辑等)。如果该纯文本包含 Javascript(在 &lt;script&gt; 标记内),它将作为 Javascript 处理。如果它令人困惑,你会想要尝试这个。只要记住事情的处理顺序,记住每个阶段收到的内容。如果您最终传递给客户端的内容(HTML/Javascript)包括格式化的 Javascript,那么您将能够像对待静态页面上的任何其他 Javascript 内容一样对待它。

以上是关于我想根据登录用户更改主页菜单。我如何在 Spring MVC 中做到这一点?的主要内容,如果未能解决你的问题,请参考以下文章

根据状态动态更改登录/注销按钮

如何根据 Electron 菜单单击更改 Redux 状态?

Ionic 2 - 用户登录后侧边菜单更改

QT Creator 主窗口 - 如何从菜单中更改每个元素的界面?

根据值Laravel登录用户

如何在登录期间检查用户并将其发送到不同的主页