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框架中,开发者可以自定义一些拦截器来实现特定的功能。拦截器是AOP思想的具体应用,用于对处理器进行预处理和后处理。在SpringMVC框架中...
SpringMVC中基于Token防止表单重复提交方法是指通过在SpringMVC配置文件中添加拦截器配置,来拦截页面请求和表单提交请求,以防止表单重复提交。下面是该方法的实现思路和实现方式: 实现思路: 1. 在SpringMVC...
在Spring MVC框架中,拦截器(Interceptor)是一种用于处理请求和响应之间通用逻辑的机制,例如权限检查、日志记录等。本示例主要展示了如何创建一个登录验证拦截器,确保只有登录过的用户才能访问特定的页面。 ...
这两种拦截器都可以通过@ControllerAdvice注解进行全局应用,或者针对特定的控制器或方法进行配置。在实际开发中,RequestBodyAdvice常用于数据验证、安全过滤、动态数据填充等;ResponseBodyAdvice则适用于响应格式...
本篇文章将深入探讨如何使用注解拦截器来实现这一功能,避免在每个需要鉴权的方法中重复编写校验代码。 首先,我们需要创建一个自定义注解,例如名为`@Auth`的注解,它将用于标记需要鉴权的方法或类。这个注解使用...
Spring MVC 防止数据重复提交的方法 Spring MVC 防止数据重复提交的方法是使用 Token 机制来实现的...-- 配置 Token 拦截器,防止用户重复提交数据 --> ``` 通过以上步骤,我们可以成功地防止数据重复提交。
在本案例中,我们将探讨如何使用注解来实现拦截器,用于数据脱敏,这是保护敏感信息的一种常见方法。数据脱敏是指在展示或传输数据时,将敏感信息替换或隐藏,以确保隐私。 首先,让我们从`pom.xml`文件开始。在...
SpringMVC.xml是核心配置文件,用于配置DispatcherServlet、拦截器、视图解析器等组件。 十二、获取Spring管理的Bean: 通过@Autowired注解或ApplicationContext的getBean()方法,可以在Spring MVC中访问其他Spring...
3. **配置SpringMVC上下文**:在指定的初始化参数中(如servlet-context.xml),配置SpringMVC的行为,包括视图解析器、模型视图、拦截器、转换器和格式化器等。 ```xml xmlns:xsi=...
4. **拦截器**:自定义拦截器,实现预处理和后处理功能,如权限控制、日志记录等。 通过 "springmvc-helloworld" 示例,你已经迈出了学习 SpringMVC 的第一步。继续深入研究,你将能熟练掌握这一强大的 Web 开发...
虽然注解简化了配置,但通常还需要一个Spring MVC配置文件,如`dispatcher-servlet.xml`,用来配置视图解析器、拦截器、message converters等。在现代Spring Boot应用中,这部分配置可以通过Java配置类实现。 综上...
**基于Annotation的SpringMVC入门小例子** ...随着项目的复杂度增加,可以进一步学习和使用如@PathVariable、@ModelAttribute等更多注解,以及AOP、拦截器、异常处理等高级特性,来实现更复杂的业务逻辑和功能需求。
在这里,我们可以定义视图解析器、处理器映射器、拦截器等。例如: ```xml <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> ...
303数据校验、错误消息的显示及国际化、Ajax返回JSON、使用HttpMessageConverter、国际化_通过超链接切换中英文、文件上传、自定义的拦截器、拦截器的零Xml配置、异常处理(ExceptionHandler注解、 ...
通常,主配置文件是`dispatcher-servlet.xml`,这个文件定义了DispatcherServlet的行为,包括视图解析器、消息转换器、拦截器等。此外,可能还会有全局的`spring-context.xml`,用于配置非Web相关的bean,如数据源、...
综上所述,"springmvc3"这个主题涵盖了Spring MVC 3.0.2版本的众多核心概念和技术,包括依赖注入、注解驱动、拦截器、AOP、数据绑定以及与其他框架如Hibernate的集成等。这个压缩包可能包含了运行一个基于Spring MVC...
拦截器是SpringMVC中用于拦截请求的组件。本教程将介绍如何创建拦截器、配置拦截器,并处理请求和响应的过程。 异常处理是任何应用程序都必须面对的问题。SpringMVC提供了强大的全局异常处理机制。教程将讲解如何...
SpringMVC笔记涉及了SpringMVC框架的全面知识,从基础入门到高级应用,内容丰富涵盖了架构原理、组件配置、处理器映射器和适配器的配置、视图解析、源码分析、整合MyBatis、参数绑定与校验、异常处理、RESTful支持...
在实际开发中,你可能还需要配置数据源、AOP、拦截器等,以及引入其他第三方库,如MyBatis、Hibernate等,以实现更复杂的功能。在不断地实践中,你将对SpringMVC有更深入的理解,并能构建出功能丰富的Web应用。