登陆信息验证
@GetMapping("/login")
public String showLoginForm(Model model,
@RequestParam(required = false) String error,
@Valid @ModelAttribute("user") UserLoginDto loginDto,
BindingResult bindingResult) {
/*model.addAttribute("user", new UserLo问题描述:ginDto());*/
model.addAttribute("user", loginDto);
// 处理用户名未注册的错误
if (LoginErrorType.USERNAME_NOT_FOUND.equals(error)) {
bindingResult.rejectValue("username", null, "该用户名未注册");
return "login-form";
}
// 处理密码错误
if (LoginErrorType.INCORRECT_PASSWORD.equals(error)) {
bindingResult.rejectValue("password", null, "密码错误");
return "login-form";
}
// 处理会话失效
if (LoginErrorType.SESSION_INVALID.equals(error)) {
bindingResult.rejectValue("username", null, "会话失效");
return "login-form";
}
// 处理会话过期
if (LoginErrorType.SESSION_EXPIRED.equals(error)) {
bindingResult.rejectValue("username", null, "会话过期");
return "login-form";
}
// 处理用户注销
if (LoginErrorType.LOGOUT.equals(error)) {
bindingResult.rejectValue("username", null, "已注销");
return "login-form";
}
return "login-form";
}
/**
* 处理登录表单的提交
*/
@PostMapping("/login")
public String processLoginForm(@Valid @ModelAttribute("user") UserLoginDto loginDto,
BindingResult bindingResult,
Model model) {
// 检查用户名是否存在
if (!userService.existsByUsername(loginDto.getUsername())) {
bindingResult.rejectValue("username", null, "该用户名未注册");
model.addAttribute("user", loginDto);
return "login-form";
}
// 检查密码是否正确
if (!userService.verifyPassword(loginDto.getUsername(), loginDto.getPassword())) {
bindingResult.rejectValue("password", null, "密码错误");
model.addAttribute("user", loginDto);
return "login-form";
}
// 登录成功,重定向到首页或
return "redirect:/";
}对这部分有点疑惑,第一个问题,登录信息在showLoginForm验证,第一次进登录页就显示错误信息,这是个小bug吧;第二个问题,不是在processLoginForm方法中验证过登陆信息了吗,虽然我知道作用不同,但是代码上是否也略显重复呢
6
收起
正在回答
1回答
第一次访问 /login → error=null → 不进任何 if → 不添加错误 → 页面就不会显示错误信息。
只有登录失败重定向回来 → 带 error 参数 → 才显示对应错误。
望采纳答案!
Java+AI全栈工程师
- 参与学习 53 人
从基础到高阶,快速打通单体,分布式,微服务等后端+前端+AI原生开发场景 AI全程驱动,轻松驾驭”综合实战->业务分析->数据应用->架构设计->工程落地” 全流程 手把手教学,低门槛入门,平滑进阶为
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星