【问题标题】:Grails Spring Security can't see flash message on authentication failureGrails Spring Security 在身份验证失败时看不到 Flash 消息
【发布时间】:2015-11-25 20:42:29
【问题描述】:

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

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

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

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

在此之后,我被重定向回登录页面,网址如下:

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 的调试日志。 http://pastebin.com/z7sU4ipQ

【问题讨论】:

    标签: grails spring-security


    【解决方案1】:
    <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}"/>
    

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 2013-11-13
      • 2012-08-15
      • 2013-12-16
      • 2015-07-28
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 2017-04-09
      相关资源
      最近更新 更多