Thymeleaf hasRole 在 JavaScript 中可见

Posted

技术标签:

【中文标题】Thymeleaf hasRole 在 JavaScript 中可见【英文标题】:Thymelaf hasRole visible in JavaScript 【发布时间】:2020-04-03 17:32:10 【问题描述】:

我有一个使用 SpringBoot+Thymeleaf+jQuery 的项目。我想在我的 javascript 中检查经过身份验证的用户的角色。基于角色,将使用 jQuery 渲染一段新的 thymeleaf。我在 html 中得到了这个:

 <sec:authorize="hasRole('ROLE_ADMIN')" var="hasRoleAdmin"></sec:authorize>

然后 hasRoleAdmin 变量应该在我的 JS 中是可见的,所以我可以这样做:

function renderButton()

 var btn="";

 if('$hasRoleAdmin' == true)
       btn = "<button id='saveButton'>Save</button>";
 else
      btn = "<button id='viewButton'>View</button>";
 

$("#root").append(btn);

我的第一个想法是像使用 jQuery 一样渲染 thymeleaf

btn = <span sec:authorize=hasRole('ROLE_ADMIN')><button id='saveButton'>Save</button></span> 
$("#root").append(btn);

但这两者中的任何一个都有效。如何检查 JavaScript 中的 spring 安全角色?我没有使用内联 JS,所有源都是单独的文件。在 JSP 中有一个如何做到这一点的例子。

springsecurity role check inside javascript

【问题讨论】:

【参考方案1】:

要在 javascript 中使用 thymeleaf,您可以将表达式封装在 [[...]] 中。

现在关于您的角色问题。我相信你可以做类似的事情

if([[$#authorization.expression('hasRole("ROLE_WHATEVER")')]])
   ...

表达式应该向客户端发送 true 或 false 。另请注意,#authorization.expression 的语法可能取决于您使用的 thymeleaf 库的版本;我可以保证它适用于 thymeleaf-extras-springsecurity4 版本 3.0.4.RELEASE。

【讨论】:

以上是关于Thymeleaf hasRole 在 JavaScript 中可见的主要内容,如果未能解决你的问题,请参考以下文章

th:remove 中的 hasRole() 不起作用

不检查用户授权:每个循环 Thymeleaf

Thymeleaf 和 Spring Security - 自定义 SpEL 表达式

thymeleaf 学习笔记4

如何在没有 xml 的情况下配置 thymeleaf-extras-springsecurity4?

thymeleaf中security的sec:authorize标签不起作用的原因