使用 Thymeleaf 时,Spring 安全会话范围似乎为空
Posted
技术标签:
【中文标题】使用 Thymeleaf 时,Spring 安全会话范围似乎为空【英文标题】:Spring security sessionscope appears to be null when using Thymeleaf 【发布时间】:2012-12-12 02:25:48 【问题描述】:当使用 Spring Security 登录失败时,它会抛出异常并在我的 JSP 中显示如下:
<c:if test="$not empty error">
<div class="errorblock">
Your login attempt was not successful, try again.<br /> Caused :
$sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message
</div>
</c:if>
现在我正在从 JSP 更改为 Thymeleaf 并尝试做同样的事情,但是当登录失败时,sessionScope
变量似乎为空。
<div th:if="$error" class="errorblock" th:text="'testing ' + $sessionScope">
</div>
这会打印出 testing null
。当我将视图解析器改回 JSP 时,它运行良好。我想我做错了什么。有什么建议吗?
【问题讨论】:
【参考方案1】:第二个和第一个不一样。如果您在没有变量名的情况下调用隐式 EL 变量 sessionScope
,我不确定您应该得到什么。怎么样:
$sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message
此外,您确定您的页面加入了会话吗?在 JSP 中有 session
指令控制会话范围是否可以通过 EL 获得。
<%@ page session="false|true" %>
【讨论】:
【参考方案2】:在 Thymeleaf 中,您不能使用 sessionScope
令牌名称访问会话变量。你改用session
。因此,您需要执行以下操作:
<div class="error"
th:if="$param.login_error"
th:with="errorMsg=$session["SPRING_SECURITY_LAST_EXCEPTION"].message">
Your login attempt was not successful, try again.<br />
Reason: <span th:text="$errorMsg">Wrong input!</span>
</div>
免责声明,根据 *** 规则:我是 Thymeleaf 的作者。
【讨论】:
有这方面的文档吗?或者我将如何使用session
或 sessionScope
?另外,param.login_error
来自哪里?它有效,但看起来像一个黑魔法。
param.login_error
是Spring Security在登录错误后创建的请求参数。您将不得不为此阅读 Spring Security 文档。至于 session
范围,它首先在 Thymeleaf 主教程(“使用 Thymeleaf”,thymeleaf.org/documentation.html)的第 15 页(“上下文”小节)中介绍,然后在本教程的其余部分和其他教程和示例应用程序中使用。
复制粘贴你的答案,得到 org.xml.sax.SAXParseException;行号:104;列号:80;元素类型“div”必须后跟属性规范“>”或“/>”。问题在于 th:with 部分。
你如何在 javascript 中做到这一点?
你好,我可以通过 session
对象访问当前登录的用户(可能还有它的属性)以在 if 语句中使用吗?现在,如果我使用<div th:text="$session.user"></div>
进行测试,它不会呈现任何内容,也不会引发错误。谢谢【参考方案3】:
以下适用于 Thymeleaf 3.0 和 Bootstrap 4.1
<div th:if="$param.error and $session" th:with="errorMsg=$session['SPRING_SECURITY_LAST_EXCEPTION']">
<div class="alert alert-dismissible alert-danger error">
Reason: <span th:text="$errorMsg">Demo Invalid input</span>
</div>
</div>
【讨论】:
以上是关于使用 Thymeleaf 时,Spring 安全会话范围似乎为空的主要内容,如果未能解决你的问题,请参考以下文章
使用 Thymeleaf 时,Spring 安全会话范围似乎为空
使用spring-boot-starter-web和thymeleaf时填充下拉列表
将分页与 Spring Boot 和 Thymeleaf 一起使用时出错
模板解析时出错。Spring boot 和 Thymeleaf