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

本文介绍如何在SpringBoot项目中处理前端表单提交,实现登录功能,并通过重定向避免重复提交。同时,文章详细讲解了如何设置登录拦截器,确保用户访问受保护页面前已成功登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端界面: 

<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为啥还要拦截呢  搞不懂!!!!   

感觉有用得话  就点个赞吧

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值