spring-security Thymelaf在JavaScript中具有可见角色

mtb9vblg  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(184)

我有一个使用SpringBoot+Thymeleaf+jQuery的项目。我想在JavaScript中检查一个认证用户的角色。基于一个角色,一个新的thymeleaf将使用jQuery呈现。我在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

slwdgvem

slwdgvem1#

要在javascript中使用thymeleaf,可以将表达式封装在[[...]]中。
关于你的角色问题。我相信你可以做一些

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

表达式应该在那里发送true或false给客户端。还要注意#authorization.expression的语法可能取决于您使用的thymeleaf库的版本;我可以保证它在thymeleaf-extras-springsecurity 4版本3.0.4.RELEASE中工作。

相关问题