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"; } }
相关推荐
token-springMVC 防止重复提交
SpringMVC中的拦截器-拦截器方法的作用和执行顺序.avi
本篇文章主要介绍了防止SpringMVC拦截器拦截js等静态资源文件的解决方法,具有一定的参考价值,有兴趣的同学可以了解一下
SpringMVC拦截器例子详解,
springmvc 拦截器
SpringMvc 拦截器 原理清楚,代码简单,值得学习!
自定义拦截器的具体实现、自定义拦截器的配置方式、多个拦截器之间的执行执行顺序
企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告
springmvc-机制(拦截器、aop、异常).pdfspringmvc-机制(拦截器、aop、异常).pdf
NULL 博文链接:https://panyongzheng.iteye.com/blog/2084629
SpringMVC框架下对限定时间拦截(适用于初学者)
可下载部署直接运行
SpringMVC拦截器源代码
SpringMVC拦截器的使用,通俗易懂!
NULL 博文链接:https://cdxs2.iteye.com/blog/1950517
springMVC 拦截器源代码 内有详细文档介绍操作 @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { //可以通过...
springmvc拦截器实现登录验证
Springmvc框架进行登录验证,除了某些特定的action请求不需要登录验证,例如登录,注册等。其他的action请求均需要登录验证,若没有登录则直接调到登录界面。若登录成功,则通过拦截
SpringMVC DispatcherServlet重写、自定义拦截器拦截器源码
SpringMVC学习(十二)——SpringMVC中的拦截器