javascript - 在 JavaScript 中的 Thymeleaf 转义表达式中使用 Spring Security

标签 javascript java spring-security thymeleaf

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)"...

中您的 Angular 色名称没有结束引号

关于javascript - 在 JavaScript 中的 Thymeleaf 转义表达式中使用 Spring Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41434231/

相关文章:

javascript - Meteor 登录 - 注销 ~ 钩子(Hook)/回调

javascript - 替换页面中的特定文本

java - Google App Engine (Java) 上的 Catch-all URL 重写

java - 如何根据请求类型使用Spring Security管理 session ?

spring-security - Spring Security 角色前缀和自定义用户详细信息服务

java - 延迟初始化: failed to lazily initialize a collection

javascript - “变量”在定义之前被使用

javascript - 使用 jQuery 检查在提交时添加到句子中的单词

java - 首选项 API 存储

java - JSF 2 - 不同页面的独立区域设置