SpringBoot---解决重复提交表单问题

Web环境配置

很简单,只是为了测试。

DOCTYPE html>
<html lang="en"  xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8">
    <title>登录title>
head>

<form method="post" action="main.html" th:action="@{/index}">
    <input type="text" name="username" class="form-control" placeholder="用户名">
    <input type="password" name="password" class="form-control" placeholder="密码">
    <input type="submit">
form>
body>
html>

创建完这个,再创建一个登录后的界面:main.html(无需内容)

pom配置

SpringWeb还有Springboot这些基本的配置,为了测试方便,还添加了lombok,thymeleaf。

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.5.1version>
        <relativePath/> 
    parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-thymeleafartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-configuration-processorartifactId>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

代码

public class IndexController {

    @GetMapping(value = {"/","/login"})
    public String loginPage(){
        return "login";
    }

    @PostMapping("/index")
    public String indexPage(String username,String password){
        return "main";
    }
}

存在问题

表单的重复提交:post请求又进行提交。当刷新页面时,还是进行了post请求。

解决问题后的代码

解决表单的重复提交问题:

由于默认的是转发到main页面,当页面刷新时,相当于还是index请求。如果是重定向到main页面,那么相当于只是刷新main页面。

其次就是添加了session来记录登录的信息。对直接访问main页面进行判定。避免没登录直接进入mainu页面。

@Controller
public class IndexController {

    @GetMapping(value = {"/","/login"})
    public String loginPage(){
        return "login";
    }
    
    //下面的两个方法解决了表单重复提交问题----------------
    @PostMapping("/index")
    public String indexPage(User user, HttpSession session, Model model){
        if("123456".equals(user.getUsername())&& "123456".equals(user.password)){
            session.setAttribute("loginUser",user);
            return "redirect:main";
        }else {
            model.addAttribute("msg","账号密码错误");
            return "login";
        }
    }


    @GetMapping("/main")
    public String mainPage(HttpSession session,Model model){

        Object loginUser = session.getAttribute("loginUser");

        if(loginUser!=null){
            return "main";
        }else {
            model.addAttribute("msg","请重新登录");
            return "login";
        }
    }
    //--------------------------------
}

你可能感兴趣的:(Sping5,java)