當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring Boot中防表单重复提交以及拦截器登录检测
生活随笔
收集整理的這篇文章主要介紹了
Spring Boot中防表单重复提交以及拦截器登录检测
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
?
理論
演示
源碼
?
理論
在用戶登錄后,如果按F5刷新會出現表單重復提交的問題,解決這個問題后,如果沒有攔截器登錄檢測,就會造成,任意用戶可以登錄后臺界面,所以要有攔截器登錄檢測。
相關的邏輯步驟:
? ? ? ? ? 1.?通過視圖映射。把用戶登錄成功的界面重定向到success的界面;
? ? ? ? ? 2. 創建一個HandlerInterceptor的子類,用于攔截設置;
? ? ? ? ? 3. 在WebMvcConfigurerAdapter的子類中,設置攔截器,以及放行該放行的請求;
?
演示
未登錄的用戶直接登錄后臺界面:
輸入用戶密碼登錄后!
按下F5也不會出現表單重復提交的問題!
?
源碼
程序結構如下:
源碼如下:
LoginHandlerInterceptor.java
package firstlogindemo.demo.config;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/**** 登錄檢測*/ public class LoginHandlerInterceptor implements HandlerInterceptor {//目標方法執行以前@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {Object user = httpServletRequest.getSession().getAttribute("loginUser");if(user == null){//未登錄返回登錄界面httpServletRequest.setAttribute("msg", "沒有權限請先登錄");httpServletRequest.getRequestDispatcher("index.html").forward(httpServletRequest, httpServletResponse);return false;}return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {} }myMvcConfig.java
package firstlogindemo.demo.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configuration public class MyMvcConfig extends WebMvcConfigurerAdapter {//所有的WebMvcConfigureAdapterregistry組建都會其作用@Bean //將組建注冊到容器中public WebMvcConfigurerAdapter webMvcConfigurerAdapter(){WebMvcConfigurerAdapter adapter = new WebMvcConfigurerAdapter() {@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("index");registry.addViewController("index.html").setViewName("index");registry.addViewController("/main.html").setViewName("success");}//注冊攔截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {//Spring Boot中已經做好靜態資源映射registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/index.html", "/", "/user/login");}};return adapter;} }LoginController.java
package firstlogindemo.demo.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.thymeleaf.util.StringUtils;import javax.servlet.http.HttpSession; import java.util.Map;@Controller public class LoginController {//@DeleteMapping//@PutMapping//@GetMapping//@RequestMapping(value = "/usr/login", method = RequestMethod.POST)@PostMapping(value = "/user/login")public String login(@RequestParam("username") String username,@RequestParam("password") String password,Map<String, Object> map, HttpSession session){if(!StringUtils.isEmpty(username) && "123456".equals(password)){//防止表單重復提交,可以重定向到主頁//return "success";session.setAttribute("loginUser", username);return "redirect:/main.html";}map.put("msg", "用戶名密碼錯誤");return "index";} }index.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><form th:action="@{/user/login}" method="post"><p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p><p>用戶名:<input name="username" type="text" placeholder="userName"></p><p>密 碼:<input name="password" type="password" placeholder="Password"></p><button type="submit">提交</button> </form></body> </html>success.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h1>[[${session.loginUser}]]</h1> <h1>成功</h1></body> </html>application.properties
spring.thymeleaf.cache=falseporn.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.19.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.loginWebDemo</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>loginWeb</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><thymeleaf.version>3.0.9.RELEASE</thymeleaf.version><thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--引入jquery-webjar--><dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.3.1</version></dependency><!--引入bootstrap--><dependency><groupId>org.webjars</groupId><artifactId>bootstrap</artifactId><version>4.0.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>?
總結
以上是生活随笔為你收集整理的Spring Boot中防表单重复提交以及拦截器登录检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初识Java中注解的分类
- 下一篇: QML工作笔记-仿前端滑出界面(Java