`

springMvc放重复提交,拦截器结合annotation

 
阅读更多
package com.geloin.spring.controller.dupsub;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Target(value = { ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Token {
	
	boolean save() default false;
	boolean remove() default false;

}

 拦截器:

package com.geloin.spring.controller.dupsub;

import java.lang.reflect.Method;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.util.StringUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;


public class DupsubHander extends HandlerInterceptorAdapter{

	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		
		if(handler instanceof HandlerMethod){
			//将handler 转换成方法处理这方法
			HandlerMethod handlerMethod = (HandlerMethod)handler;
			//通过处理者拿到方法
			Method method = handlerMethod.getMethod();
			//通过方法拿到annotation
			Token annotation = method.getAnnotation(Token.class);
			
			if(annotation!=null){
				boolean needSaveSession = annotation.save();
				if(needSaveSession){
					HttpSession session =request.getSession();
					if(session!=null){
						session.setAttribute("token", UUID.randomUUID().toString().replaceAll("-",""));
					}
				}
				boolean needRemoveSession = annotation.remove();
				if(needRemoveSession){
                   	
					if(isPre(request)){
						response.sendRedirect("dupu.html");;
						return false;
					}
					
					request.getSession(false).removeAttribute("token");
				}
				return true;
			}
		}
		
		return super.preHandle(request, response, handler);
	}
	
	public boolean isPre(HttpServletRequest request){
		//獲取服務端的token
		if(StringUtils.isEmpty(request.getSession(false).getAttribute("token"))){
			return true;
		}
		//獲取客戶啊你單的token值
		if(StringUtils.isEmpty(request.getParameter("token"))){
			return true;
		}
		//不相同時候返回false
		if(!request.getSession(false).getAttribute("token").toString().equals(request.getParameter("token").toString())){
			return true;
		}
		
		return false;
	}
	
	
  
}

 MVC-content.xml拦截器配置:

	<mvc:interceptors>
	  <mvc:interceptor>
	    <mvc:mapping path="/**"/>
	    <bean class="com.geloin.spring.controller.dupsub.DupsubHander"></bean>
	  </mvc:interceptor>
	</mvc:interceptors>

   在提交页面:

 <input type="hidden" value="${token}" name="token"/>

 controller

package com.geloin.spring.controller;


import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.geloin.spring.controller.dupsub.Token;
import com.geloin.spring.entity.User;

@Controller
public class BinderTestController extends BaseCotroller{
	
	@Token(save=true)
	@RequestMapping(value="/productToken")
	public String test1(HttpServletRequest request){
		return "binder";
	}
	
	@Token(remove=true)
	@RequestMapping(value="/produpsub")
	public String produpsub(HttpServletRequest request,User user){
		return "Success";
	}
	
	@RequestMapping(value="/dupu")
	public String dupu(HttpServletRequest request){
		return "dupsub";
	}
	
	

}

 

分享到:
评论

相关推荐

    SpringMVC自定义拦截器实现过程详解

    SpringMVC自定义拦截器实现过程详解 SpringMVC自定义拦截器是指在SpringMVC框架中,开发者可以自定义一些拦截器来实现特定的功能。拦截器是AOP思想的具体应用,用于对处理器进行预处理和后处理。在SpringMVC框架中...

    springMVC中基于token防止表单重复提交方法

    SpringMVC中基于Token防止表单重复提交方法是指通过在SpringMVC配置文件中添加拦截器配置,来拦截页面请求和表单提交请求,以防止表单重复提交。下面是该方法的实现思路和实现方式: 实现思路: 1. 在SpringMVC...

    SpringMVC拦截器——实现登录验证拦截器的示例代码

    在Spring MVC框架中,拦截器(Interceptor)是一种用于处理请求和响应之间通用逻辑的机制,例如权限检查、日志记录等。本示例主要展示了如何创建一个登录验证拦截器,确保只有登录过的用户才能访问特定的页面。 ...

    SpringMVC的Body参数拦截的问题

    这两种拦截器都可以通过@ControllerAdvice注解进行全局应用,或者针对特定的控制器或方法进行配置。在实际开发中,RequestBodyAdvice常用于数据验证、安全过滤、动态数据填充等;ResponseBodyAdvice则适用于响应格式...

    springmvc用于方法鉴权的注解拦截器的解决方案代码

    本篇文章将深入探讨如何使用注解拦截器来实现这一功能,避免在每个需要鉴权的方法中重复编写校验代码。 首先,我们需要创建一个自定义注解,例如名为`@Auth`的注解,它将用于标记需要鉴权的方法或类。这个注解使用...

    Spring mvc防止数据重复提交的方法

    Spring MVC 防止数据重复提交的方法 Spring MVC 防止数据重复提交的方法是使用 Token 机制来实现的...-- 配置 Token 拦截器,防止用户重复提交数据 --&gt; ``` 通过以上步骤,我们可以成功地防止数据重复提交。

    springboot spring aop 拦截器注解方式实现脱敏

    在本案例中,我们将探讨如何使用注解来实现拦截器,用于数据脱敏,这是保护敏感信息的一种常见方法。数据脱敏是指在展示或传输数据时,将敏感信息替换或隐藏,以确保隐私。 首先,让我们从`pom.xml`文件开始。在...

    SpringMVC框架架构介绍

    SpringMVC.xml是核心配置文件,用于配置DispatcherServlet、拦截器、视图解析器等组件。 十二、获取Spring管理的Bean: 通过@Autowired注解或ApplicationContext的getBean()方法,可以在Spring MVC中访问其他Spring...

    SpringMVC配置

    3. **配置SpringMVC上下文**:在指定的初始化参数中(如servlet-context.xml),配置SpringMVC的行为,包括视图解析器、模型视图、拦截器、转换器和格式化器等。 ```xml xmlns:xsi=...

    springmvc-helloworld

    4. **拦截器**:自定义拦截器,实现预处理和后处理功能,如权限控制、日志记录等。 通过 "springmvc-helloworld" 示例,你已经迈出了学习 SpringMVC 的第一步。继续深入研究,你将能熟练掌握这一强大的 Web 开发...

    springMVC+annotation

    虽然注解简化了配置,但通常还需要一个Spring MVC配置文件,如`dispatcher-servlet.xml`,用来配置视图解析器、拦截器、message converters等。在现代Spring Boot应用中,这部分配置可以通过Java配置类实现。 综上...

    基于annotation的SpringMVC入门小例子

    **基于Annotation的SpringMVC入门小例子** ...随着项目的复杂度增加,可以进一步学习和使用如@PathVariable、@ModelAttribute等更多注解,以及AOP、拦截器、异常处理等高级特性,来实现更复杂的业务逻辑和功能需求。

    Maven SpringMVC 测试DEMO

    在这里,我们可以定义视图解析器、处理器映射器、拦截器等。例如: ```xml &lt;bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/&gt; ...

    SpringMVC示例

    303数据校验、错误消息的显示及国际化、Ajax返回JSON、使用HttpMessageConverter、国际化_通过超链接切换中英文、文件上传、自定义的拦截器、拦截器的零Xml配置、异常处理(ExceptionHandler注解、 ...

    SpringMVC 中xml文件的读取与显示

    通常,主配置文件是`dispatcher-servlet.xml`,这个文件定义了DispatcherServlet的行为,包括视图解析器、消息转换器、拦截器等。此外,可能还会有全局的`spring-context.xml`,用于配置非Web相关的bean,如数据源、...

    springmvc3

    综上所述,"springmvc3"这个主题涵盖了Spring MVC 3.0.2版本的众多核心概念和技术,包括依赖注入、注解驱动、拦截器、AOP、数据绑定以及与其他框架如Hibernate的集成等。这个压缩包可能包含了运行一个基于Spring MVC...

    springMVC 教程

    拦截器是SpringMVC中用于拦截请求的组件。本教程将介绍如何创建拦截器、配置拦截器,并处理请求和响应的过程。 异常处理是任何应用程序都必须面对的问题。SpringMVC提供了强大的全局异常处理机制。教程将讲解如何...

    springMVC笔记.pdf

    SpringMVC笔记涉及了SpringMVC框架的全面知识,从基础入门到高级应用,内容丰富涵盖了架构原理、组件配置、处理器映射器和适配器的配置、视图解析、源码分析、整合MyBatis、参数绑定与校验、异常处理、RESTful支持...

    intellij maven springmvc demo

    在实际开发中,你可能还需要配置数据源、AOP、拦截器等,以及引入其他第三方库,如MyBatis、Hibernate等,以实现更复杂的功能。在不断地实践中,你将对SpringMVC有更深入的理解,并能构建出功能丰富的Web应用。

Global site tag (gtag.js) - Google Analytics