一、问题描述
需求:在登录页面输入用户名或者密码,经过后台查询后,将结果存储到作用域对象中。当数据库中查询到结果时,直接跳转到首页,当查询不到结果时,跳转到登录页面。并在下方提示。用户名或者是密码错误。
问题:当数据库中查询不到结果时,后台的跳转方式为请求转发时,错误提示会消失,如果使用的是重定向则不会出现这个问题。
<form class="ui large form" method="post" action="#" th:action="@{/admin/login}">
<div class="ui segment">
<div class="field">
<div class="ui left icon input">
<i class="user icon"></i>
<input type="text" name="username" placeholder="用户名">
</div>
</div>
<div class="field">
<div class="ui left icon input">
<i class="lock icon"></i>
<input type="password" name="password" placeholder="密码">
</div>
</div>
<button class="ui fluid large teal submit button">登 录</button>
</div>
<div class="ui error message"></div>
<div class="ui negative message" th:unless="${#strings.isEmpty(message)}" th:text="${message}">用户名或密码错误</div>
</form>
@PostMapping("/login")
public String login(@RequestParam String username,
@RequestParam String password,
HttpSession session,
RedirectAttributes attributes){
User user = userService.checkUser(username, password);
if (user != null){
user.setPassword(null);
session.setAttribute("user",user);
return "admin/index";
}else {
// 再次登录会出现问题,得使用重定向
// return "admin/login";
attributes.addFlashAttribute("message","用户名或密码错误!");
return "redirect:/admin";
}
}