登陆信息验证

登陆信息验证

    @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方法中验证过登陆信息了吗,虽然我知道作用不同,但是代码上是否也略显重复呢

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

第一次访问 /login → error=null → 不进任何 if → 不添加错误 → 页面就不会显示错误信息。
只有登录失败重定向回来 → 带 error 参数 → 才显示对应错误。

望采纳答案!

  • 亦冷 提问者 #1

    理解了,谢谢

    6天前
  • 亦冷 提问者 #2

    当第一次访问登录界面时,由于在showLoginForm方法中使用了@Valid注解,Spring会自动对 UserLoginDto进行验证,因为 DTO中的字段有@NotBlank等验证注解,所以会立即触发验证错误,即在页面上显示“用户名不能为空”以及“密码不能为空”。 代码的逻辑不是这样吗

    4天前
  • 老卫 回复 提问者 亦冷 #3

    页面显示,需要通过 return 返回

    3天前
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java+AI全栈工程师
  • 参与学习       53    人

从基础到高阶,快速打通单体,分布式,微服务等后端+前端+AI原生开发场景 AI全程驱动,轻松驾驭”综合实战->业务分析->数据应用->架构设计->工程落地” 全流程 手把手教学,低门槛入门,平滑进阶为

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师