Grails Spring Security无法在身份验证失败时看到Flash消息

时间:2015-11-25 12:28:43

标签: grails spring-security

我正在尝试实现一些非常简单的东西。但是,我似乎无法让它发挥作用。

我已经实现了自定义表单登录,我正在尝试在身份验证失败时显示错误消息。

身份验证失败后。我接受了grails.plugin.springsecurity.LoginController.authfail()方法。它加载异常消息并将其设置为flash消息。

if (springSecurityService.isAjax(request)) {
    render([error: msg] as JSON)
}
else {
    flash.message = msg
    redirect action: 'auth', params: params
}

在此之后,我将使用以下URL重定向回登录页面:

http://localhost:9090/lm/login/auth?login_error=1

在我的auth.gsp文件中。我添加了以下代码来显示flash消息。

<g:message code="${flash.message}" args="${flash.args}" default="${flash.default}"/>

但重定向时登录页面上没有显示任何内容。这可能是什么问题?

以下是我尝试身份验证时Spring Security的DEBUG日志。 http://pastebin.com/z7sU4ipQ

1 个答案:

答案 0 :(得分:2)

<g:message code="${flash.message}" args="${flash.args}" default="${flash.default}"/>

上面的一行表示flash.message应该是一个消息代码,如果没有找到代码,那么它应该使用flash.default作为默认值,这也是不可用的。

考虑到,由于凭据错误导致您的登录失败,因此您的flash.message消息将显示No account found with this username and password消息。当您将此flash.message呈现到您的GSP中g:message code时,当然没有定义消息代码,因此它会查找flash.default。但flash.default没有任何价值,所以你没有看到任何东西。

因此,要么只用${flash.message}替换该行,要么改为:

<g:message code="${flash.message}" args="${flash.args}" default="${flash.message}"/>