Spring MVC表单防重复提交

简介: ​利用Spring MVC的过滤器及token传递验证来实现表单防重复提交。创建注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.


利用Spring MVC的过滤器及token传递验证来实现表单防重复提交。

创建注解

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public@interfaceToken{

booleancreate()defaultfalse;

booleanremove()defaultfalse;

}

在跳转页面的方法上加上:@Token(create = true)\

在提交的action方法上加上:@Token(remove = true)

创建过滤器

publicclassTokenInterceptorextendsHandlerInterceptorAdapter{

privateLoggerlogger=Logger.getLogger(TokenInterceptor.class);

privatestaticfinalStringTOKEN="token";

@Override

publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,

Objecthandler)throwsException{

if(handlerinstanceofHandlerMethod){

Methodmethod=((HandlerMethod)handler).getMethod();

Tokenannotation=method.getAnnotation(Token.class);

if(annotation!=null){

HttpSessionsession=request.getSession();

// 创建token

booleancreate=annotation.create();

if(create){

session.setAttribute(TOKEN,UUID.randomUUID().toString());

returntrue;

}

// 删除token

booleanremove=annotation.remove();

if(remove){

if(isRepeatSubmit(request)){

logger.warn("表单不能重复提交:"+request.getRequestURL());

returnfalse;

}

session.removeAttribute(TOKEN);

}

}

}else{

returnsuper.preHandle(request,response,handler);

}

returntrue;

}

privatebooleanisRepeatSubmit(HttpServletRequestrequest){

Stringtoken=(String)request.getSession().getAttribute(TOKEN);

if(token==null){

returntrue;

}

StringreqToken=request.getParameter(TOKEN);

if(reqToken==null){

returntrue;

}

if(!token.equals(reqToken)){

returntrue;

}

returnfalse;

}

}

配置拦截器


表单添加token

在form表单里面添加token域,提交表单时需要传过去。

相关文章
|
1月前
|
缓存 前端开发 Java
Spring MVC 面试题及答案整理,最新面试题
Spring MVC 面试题及答案整理,最新面试题
88 0
|
1月前
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
10 0
|
1月前
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
9 0
|
1月前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
25 0
|
1月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
40 1
|
11天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
23 3
|
11天前
|
存储 前端开发 Java
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
14 1
|
11天前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
29 3
|
20天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南
|
27天前
|
敏捷开发 监控 前端开发
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
61 0