springboot防止重复提交最简单的方法

前端界面: 

<form class="form-signin"  th:action="@{/user/login}" method="post">

后端控制层:

    @PostMapping("/user/login")
    public String login(@RequestParam ("userName")String userName,
                        @RequestParam ("password")String password) {
        if ("admin".equals(userName) && "123456".equals(password)) {
            // 之所以这样redirect   是因为防止重复提交
            return "redirect:/main";
        } else {
            return "index";
        }
    }

使用重定向来处理  同时在视图解析里面添加

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("login");
        registry.addViewController("/login").setViewName("login");
        registry.addViewController("/success").setViewName("success");
        registry.addViewController("/good").setViewName("success");
        registry.addViewController("/main").setViewName("dashboard");
    }

这样的话 就完美解决了表单重复提交

但是又衍生出了另外一个问题:  我在浏览器中输入链接指定main的地址的话  还是可以跳转的   

问题来了  就要解决   当前最简单的解决办法就是 在访问控制层的之前  我先判断下  用户是否已经登录过了呢 ? 

所以 咱们加个登录拦截器  去检查用户是否登录

 

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptors())
                .addPathPatterns("/**")
                .excludePathPatterns("/", "/login",
                        "/user/login", "/**/*.css", "/**/*.js", "/**/*.png", "/**/*.jpg",
                        "/**/*.jpeg", "/**/*.gif", "/**/fonts/*", "/**/*.svg");
    }

 解释下 :首先登录页面   咱们是不需要拦截的  对吧    然后登录请求的话  也不要拦   但是这里如果不放开静态资源的话  就会被拦截   不是说springboot会自动的放开static下的静态资源吗????  很奇怪!!!!!

原因:springboot版本的问题   1.多的版本确实放开了静态资源  但是2.0以后的版本  就关闭了     个人感觉  放开挺好的   因为本来springboot就认为static下面是静态资源   是界面加载时所必须  那么2.0为啥还要拦截呢  搞不懂!!!!   

感觉有用得话  就点个赞吧