表单重复提交原因及解决办法

在写网站的登录与注册时最容易出现的就是表单重复提交问题,那么表单重复提交的原因是什么?

@PostMapping("/login")
    public String main(User user, HttpSession session, Model model){ //RedirectAttributes

        if(StringUtils.hasLength(user.getUserName()) && "123456".equals(user.getPassword())){
            //把登陆成功的用户保存起来
            session.setAttribute("loginUser",user);
            
            return "main";
        }else {
            model.addAttribute("msg","账号密码错误");
            //回到登录页面
            return "login";
        }

看上面的登录代码,当账号密码验证通过时会return “main”;
那么return “main”;的真正含义是什么,在springboot中,return "main"的意义就是转发到main.html页面,那么我们浏览器此时的访问的地址就是localhost:端口号/login,当我们点击刷新时访问的还是这个地址,那么就会造成表单重复提交。

如何解决

@PostMapping("/login")
    public String main(User user, HttpSession session, Model model){ //RedirectAttributes

        if(StringUtils.hasLength(user.getUserName()) && "123456".equals(user.getPassword())){
            //把登陆成功的用户保存起来
            session.setAttribute("loginUser",user);
            //登录成功重定向到main.html;  重定向防止表单重复提交
            return "redirect:/main.html";
        }else {
            model.addAttribute("msg","账号密码错误");
            //回到登录页面
            return "login";
        }

    }

    /**
     * 去main页面
     * @return
     */
    @GetMapping("/main.html")
    public String mainPage(HttpSession session,Model model){

        log.info("当前方法是:{}","mainPage");
        
        return "main";

    }
}

如上代码,在判断账号密码成功后重定向到"main.html",我们知道重定向与转发的不同是转发时请求的地址不会发生变化,就如上面我们访问localhost:端口号/login这个地址,然后转发到main.html,此时地址栏的地址还是localhost:端口号/login,而当我们重定向到main.html这个接口是,地址就变成了localhost:端口号/main.html。那么当我们点击刷新时,就访问的是这个重定向的地址,而不会访问localhost:端口号/login进行表单重复提交。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值