页面不需要任何传入,只需要在验证的controller方法上写上自定义注解即可
写好自定义注解
[java] view plain copy
package com.thinkgem.jeesite.common.repeat_form_validator
import java.lang.annotation.ElementType
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy
import java.lang.annotation.Target
/**
* 一个用户 相同url 同时提交 相同数据 验证
* @author Administrator
*
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SameUrlData {
}
写好拦截器
[java] view plain copy
package com.thinkgem.jeesite.common.repeat_form_validator
import java.lang.reflect.Method
import java.util.HashMap
import java.util.Map
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import org.springframework.web.method.HandlerMethod
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter
import com.thinkgem.jeesite.common.mapper.JsonMapper
/**
* 一个用户 相同url 同时提交 相同数据 验证
* 主要通过 session中保存到的url 和 请求参数。如果和上次相同,则是重复提交表单
* @author Administrator
*
*/
public class SameUrlDataInterceptor extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler
Method method = handlerMethod.getMethod()
SameUrlData annotation = method.getAnnotation(SameUrlData.class)
if (annotation != null) {
if(repeatDataValidator(request))//如果重复相同数据
return false
else
return true
}
return true
} else {
return super.preHandle(request, response, handler)
}
}
/**
* 验证同一个url数据是否相同提交 ,相同返回true
* @param httpServletRequest
* @return
*/
public boolean repeatDataValidator(HttpServletRequest httpServletRequest)
{
String params=JsonMapper.toJsonString(httpServletRequest.getParameterMap())
String url=httpServletRequest.getRequestURI()
Map<String,String>map=new HashMap<String,String>()
map.put(url, params)
String nowUrlParams=map.toString()//
Object preUrlParams=httpServletRequest.getSession().getAttribute("repeatData")
if(preUrlParams==null)//如果上一个数据为null,表示还没有访问页面
{
httpServletRequest.getSession().setAttribute("repeatData", nowUrlParams)
return false
}
else//否则,已经访问过页面
{
if(preUrlParams.toString().equals(nowUrlParams))//如果上次url+数据和本次url+数据相同,则表示城府添加数据
{
return true
}
else//如果上次 url+数据 和本次url加数据不同,则不是重复提交
{
httpServletRequest.getSession().setAttribute("repeatData", nowUrlParams)
return false
}
}
}
}
配置spring mvc
[html] view plain copy
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.thinkgem.jeesite.common.repeat_form_validator.SameUrlDataInterceptor"/>
</mvc:interceptor>
要么用AJAX提交表单,html页面可以用hidden的input框存储一个数值,提交表单成功后在php里面用session存储hidden表框中的值,html页面也要更改hidden的input框的值,下次提交时就可以通过判断session的值和再次提交过来的hidden框的是不是一样的来判断是否重复提交表欢迎分享,转载请注明来源:内存溢出
评论列表(0条)