spring boot防重复请求
时间: 2023-07-30 22:05:23 浏览: 99
在Spring Boot中,可以使用Synchronized关键字或者使用Token令牌来防止重复请求。
1. 使用Synchronized关键字
在Controller层方法中添加Synchronized关键字,可以保证同一个时间只能有一个请求访问该方法,从而防止重复请求。
```java
@RestController
public class DemoController {
private static final Object lock = new Object();
@PostMapping("/demo")
public synchronized String demo() {
// do something
return "success";
}
}
```
2. 使用Token令牌
在前端页面中,可以使用Token令牌来防止重复提交,具体实现方式如下:
- 在表单中添加一个隐藏域,用于存储Token值。
```html
<form action="/demo" method="post">
<input type="hidden" name="token" value="${token}">
<input type="text" name="name">
<button type="submit">Submit</button>
</form>
```
- 在Controller层方法中,判断Token是否有效,如果有效则将Token值删除,否则返回错误信息。
```java
@RestController
public class DemoController {
private static final ConcurrentHashMap<String, Object> TOKEN_MAP = new ConcurrentHashMap<>();
@PostMapping("/demo")
public String demo(@RequestParam("token") String token) {
if (TOKEN_MAP.containsKey(token)) {
TOKEN_MAP.remove(token);
// do something
return "success";
} else {
return "Invalid Token!";
}
}
@GetMapping("/token")
public String token() {
String token = UUID.randomUUID().toString();
TOKEN_MAP.put(token, new Object());
return token;
}
}
```
在页面加载时,请求/token接口获取Token值,并将其添加到表单中的隐藏域中。当用户提交表单时,将Token值作为参数传递到Controller层方法中。如果Token值存在,则删除Token值,否则返回错误信息。
阅读全文
相关推荐


















