堆栈:Spring安全和Thymeleaf。
我有以下问题:我想根据用户的角色显示或不显示所有html模板中的某些元素。
因此,我需要一个布尔变量“isAdmin”在所有模板中,以便我可以使用它的条件:
<p th:if="${isAdmin}">Admin functionality</p>
请帮我找到最好的解决方案。我尝试过的:
**选项1。**我可以在所有控制器中向模型添加变量。但我认为这是一个不好的做法。
**选项2.**我可以直接从会话中使用“th:with”将变量注入到主体中:
<body th:with="isAdmin=
${session
.SPRING_SECURITY_CONTEXT
.getAuthentication()
.getAuthorities()
.contains(T(com.example.model.enums.Role).ADMIN)}">
但是声明太长了,我也没有在Thymeleaf中找到关于全局变量作用域的信息。
**选项3。**我知道我应该在用户会话中添加自定义属性。而且我应该在授权后只添加一次。我想不出比覆盖successForwardUrl更好的方法了,在新的控制器中添加属性并重定向到主页。
第一个
但我仍然认为这不是最好的解决办法。
1条答案
按热度按时间s8vozzvw1#
看起来你在寻找最好的解决方案
Thymeleaf与Spring Security有着特殊的集成
您可以检查docs here
首先,您应该将
org.thymeleaf.extras
依赖项添加到项目中:下一步:将Thymeleaf
sec
命名空间添加到.html
模板:最后,您可以检查用户角色并显示不同角色的具体内容:
sec:authentication
也可用于检索用户名和角色: