Thymeleaf
3.0 可以做到这一点:
/*[# th:if="${user.admin}"]*/
alert('Welcome admin');
/*[/]*/
但是这不起作用:
/*[# sec:authorize="hasAnyRole('ROLE_ADMIN)"]*/
alert('Welcome admin');
/*[/]*/
这真的不可能还是我做错了什么?
我使用 Spring Security 4.1。
关于转义表达式解析的一些背景信息:https://github.com/thymeleaf/thymeleaf/issues/395
编辑 1
Daniel Fernández 在我最初的问题中发现缺少单引号。
不幸的是加了之后还是不行
表达式被解析,因为它从生成的 html/javascript 中消失了。
但是 document.writeln() 会被执行,即使我没有登录,或者即使我登录并且我将检查更改为 sec:authorize="hasRole('ROLE_ADMIN123')
>/p>
<script type="text/javascript" th:inline="javascript">
/*[# sec:authorize="hasRole('ROLE_ADMIN')"]*/
document.writeln("ADMIN !!!");
/*[/]*/
</script>
编辑2
这是我的解决方法 until further notice :
在 @Service
中创建一个方法来检查用户是否具有所需的 Angular 色:
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
@Service
public class UtilService {
public boolean hasAnyRole(HttpServletRequest req, String... roles) {
for (final String role : roles) {
if (req.isUserInRole(role)) {
return true;
}
}
return false;
}
}
然后在 JavaScript
block 中像这样使用它:
<script type="text/javascript" th:inline="javascript">
/*[# th:if="${@utilService.hasAnyRole(#httpServletRequest, 'ROLE_ADMIN')}"]*/
...
/*[/]*/
</script>
最佳答案
看起来像是语法错误。在您的 sec:authorize="hasAnyRole('ROLE_ADMIN)"
...
关于javascript - 在 JavaScript 中的 Thymeleaf 转义表达式中使用 Spring Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41434231/