我正在使用Grails 3.2.7以及弹簧 - 安全核:3.1.1,我想在注销时从控制器上设置一条消息,然后我需要在我的登录屏幕(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>
我看不到此消息。有人知道如何显示此消息吗?
如果注销时未将其重定向到验证页面,则不会看到闪存消息。
找出您将哪个页面重定向到此代码。
<g:if test='${flash.message}'>
<div class="login_message">${flash.message}</div>
</g:if>
如果您真的想在验证页面上查看此消息,请确保将您直接重定向到Auth Page。
。您是否考虑过使用会议?
http://docs.grails.org/3.1.1/ref/servlet api/session.html
与Flash消息不同,它们存在直到重置它们为止。第一次请求后,闪存消息是重置的。
@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)