防止重复提交过滤详解
配置过滤器
ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
@Bean
public FilterRegistrationBean someFilterRegistration()
{
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new RepeatableFilter());
registration.addUrlPatterns("/*");
registration.setName("repeatableFilter");
registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE);
return registration;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
具体过滤器
ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java
构建可重复读取inputStream的request
原因是因为这里过滤器校验的时候会读取一次,后面controller 的时候@RequestBody 还会在读取。所以要构建可重复读取inputStream的request 。
@RepeatSubmit 防重注解
ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
注意这里用的是拦截器,而不是切面
注册拦截器
/**
* 自定义拦截规则
*/
@Override
public void addInterceptors(InterceptorRegistry registry)
{
registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
拦截器
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java
验证是否重复提交由子类实现具体的防重复提交的规则
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
# 资料
上次更新: 2025/04/03, 11:07:08