4

当使用 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 时,它运行良好。我想我做错了什么。有什么建议么?

4

3 回答 3

19

In Thymeleaf, you don't access session variables using the sessionScope token name. You use session instead. So you need to do something like:

<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>

Disclaimer, according to StackOverflow rules: I am the author of Thymeleaf.

于 2012-12-27T00:04:05.927 回答
5

第二个和第一个不一样。如果您在没有变量名的情况下调用隐式 EL 变量,我不确定您应该得到什么sessionScope。怎么样:

${sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message}

此外,您确定您的页面加入了会话吗?在 JSP 中,有一个session指令控制会话范围是否可以通过 EL 获得。

<%@ page session="false|true" %>
于 2012-12-26T21:33:10.173 回答
0

以下适用于 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>
于 2018-07-02T08:59:32.540 回答