spring自定义注解,防止页面重复提交
来源:互联网 发布:js导出文本格式 编辑:程序博客网 时间:2024/06/07 05:35
注解:@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface DuplicateSubmitToken { boolean bindToken() default true; boolean unbindToken() default true;}拦截器:package com.auspiciousclouds.support.spring.mvc.interceptor;import java.lang.reflect.Method;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.web.bind.annotation.support.HandlerMethodResolver;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import com.auspiciousclouds.config.Configuration;import com.auspiciousclouds.kit.UUIDKit;import com.auspiciousclouds.model.domain.UserDomain;import com.auspiciousclouds.support.spring.mvc.annotation.DuplicateSubmitToken;public class DuplicateSubmitTokenInterceptor extends HandlerInterceptorAdapter implements ApplicationContextAware{private ApplicationContext applicationContext ;@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {UserDomain sessionUser = UserDomain.get( request); if (sessionUser != null) { Method method = org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.class.getDeclaredMethod("getMethodResolver", Object.class); method.setAccessible(true); HandlerMethodResolver resolver = (HandlerMethodResolver)method.invoke(applicationContext.getBean("annotationMethodHandlerAdapter"), handler); Method resolveHandlerMethod = resolver.getClass().getMethod("resolveHandlerMethod", HttpServletRequest.class); resolveHandlerMethod.setAccessible(true); Method executorMethod = (Method)resolveHandlerMethod.invoke(resolver, request); DuplicateSubmitToken annotation = executorMethod.getAnnotation(DuplicateSubmitToken.class); if (annotation != null) { boolean bindSession = annotation.bindToken(); if (bindSession) { request.getSession(false).setAttribute(Configuration.SystemConstant.DUPLICATETOKEN, UUIDKit.getUUID()); } boolean unbindSession = annotation.unbindToken(); if (unbindSession) { if (isDuplicateSubmitToken(request)) { System.out.println("--------------------------------------------------------------------------DuplicateSubmitTokenInterceptor-----------------------------------------------------------------------------"); return false; } request.getSession(false).removeAttribute(Configuration.SystemConstant.DUPLICATETOKEN); } } } return true;}/** * * isDuplicateSubmitToken 判断是否是重复提交 * * @param request * @return * boolean * @exception * @since 1.0.0 */ private boolean isDuplicateSubmitToken(HttpServletRequest request) { String serverToken = (String) request.getSession(false).getAttribute(Configuration.SystemConstant.DUPLICATETOKEN); if (serverToken == null) { return true; } String clinetToken = request.getParameter(Configuration.SystemConstant.DUPLICATETOKEN); if (clinetToken == null) { return true; } if (!serverToken.equals(clinetToken)) { return true; } return false; }@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {super.postHandle(request, response, handler, modelAndView);}@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {super.afterCompletion(request, response, handler, ex);}@Overridepublic void setApplicationContext(ApplicationContext applicationContext)throws BeansException {this.applicationContext = applicationContext;}}使用 :@RequestMapping("/home")@DuplicateSubmitTokenpublic String home(ModelMap model){}
0 0
- spring自定义注解,防止页面重复提交
- Spring注解方式防止表单重复提交
- 防止页面重复提交
- 防止页面重复提交
- 防止页面重复提交
- 使用自定义注解和token防止表单重复提交
- struts2 防止页面重复提交
- .aspx页面防止重复提交
- token 防止页面重复提交
- 等待提交页面防止用户重复提交
- 常用页面提交方式 | 防止重复提交
- Token注解防止表单的重复提交
- 【spring mvc】Spring MVC拦截器+注解方式实现防止表单重复提交
- Spring MVC拦截器+注解方式实现防止表单重复提交
- Spring MVC拦截器+注解方式实现防止表单重复提交
- Spring MVC拦截器+注解方式实现防止表单重复提交
- Spring MVC拦截器+注解方式实现防止表单重复提交
- Spring MVC拦截器+注解方式实现防止表单重复提交
- 关于spark利用jar包跑job的一些总结(二)
- 欢迎使用CSDN-markdown编辑器
- C# 重构之五(移除参数重构)
- ZooKeeper编程(一)
- Effecticve学习笔记_条款46:需要类型转换时请为模板定义非成员函数
- spring自定义注解,防止页面重复提交
- 乐观锁与悲观锁(多线程)
- redmine 迁移到新版本
- session和cookie的区别和联系
- js 面向对象
- Canvas drawBitmap详解
- double类型数据初始化
- 关于JQ中slideUp,slideDown以及solideTogle的问题
- window.event对象详解