如何在登录页面中显示Flash消息

时间:2017-12-06 10:38:44

标签: grails spring-security

我正在使用Grails 3.2.7和spring-security-core:3.1.1,我想在注销时从控制器向flash对象设置一条消息,然后我需要在登录屏幕上显示此消息(auth.gsp)

请参阅我写的以下代码。

在控制器中

if(condition 1){ 
flash.message = "logged out successfully and your claim id is 12345"; redirect(uri:"/logout"); 
}else if(condition b){ 
flash.message = "logged out"; redirect(uri:"/logout"); 
}else if(condition c){ 
flash.message = "multiple login is not allowed"; redirect(uri:"/logout"); 
}

在auth.gsp中

<g:if test='${flash.message}'>
<div class="login_message">${flash.message}</div>
</g:if>

我看不到这条消息。有谁知道如何显示此消息?

2 个答案:

答案 0 :(得分:0)

如果您在注销时未被重定向到auth页面,则不会看到flash消息。

找出您重定向到哪个页面以及此代码。

<g:if test='${flash.message}'>
<div class="login_message">${flash.message}</div>
</g:if>

如果您真的想在auth页面上看到此消息,请确保logout将您直接重定向到auth页面。

您是否考虑过使用会话?

http://docs.grails.org/3.1.1/ref/Servlet%20API/session.html

与Flash消息不同,它们一直存在,直到您重置它们。 Flash消息在您第一次请求后重置。

答案 1 :(得分:0)

回答@Abilash

在您的控制器中

    @RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView login(@RequestParam(value = "error", required = false) String error,
        @RequestParam(value = "logout", required = false) String logout,
        @RequestParam(value = "expired", required = false) String expired,
        HttpServletRequest request) {

    ModelAndView model = new ModelAndView();
    if (error != null) {
        model.addObject("error", getErrorMessage(request, "SPRING_SECURITY_LAST_EXCEPTION"));
    }

    if (logout != null) {
        model.addObject("msg", "You've been logged out successfully.");
    }

    if (expired != null) {
        model.addObject("msg", "Session Timeout..!");

    }

    model.setViewName("login");

    return model;

}

和你的观点

<div class="error" style="color: red;" align="center">${error}</div>

在你的春季安全配置中

表示错误

.and().formLogin().loginPage("/login").failureUrl("/login?error")

for Logount

.and().logout().logoutSuccessUrl("/login?logout").invalidateHttpSession(true) 
相关问题