我正在尝试实现一些非常简单的东西。但是,我似乎无法让它发挥作用。
我已经实现了自定义表单登录,我正在尝试在身份验证失败时显示错误消息。
身份验证失败后。我接受了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
答案 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}"/>