我正在使用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>
我看不到这条消息。有谁知道如何显示此消息?
答案 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)