你的位置:首页 > Java教程

[Java教程]SpringMVC表当重复提交


最近公司上线,有同志进行攻击,表当防重复提交也没有弄,交给我 ,本人以前也没弄过,知道大概的思路,但是那样实在是太麻烦了,虽然后面试过使用过滤器加拦截器实现,不过还是有点小麻烦。

后来在网上搜索后发现不错的方案如下:注解加拦截器完成

首先创建注解token:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)设置注解的作用范围
public @interface Token {

boolean save() default false;

boolean remove() default false;
}

创建token拦截器:

public class TokenInterceptor 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();

    Token annotation = method.getAnnotation(Token.class);
    if (annotation != null) {
      boolean needSaveSession = annotation.save();
      if (needSaveSession) {
      request.getSession(false).setAttribute("token", UUID.randomUUID().toString());

      }
      boolean needRemoveSession = annotation.remove();
      if (needRemoveSession) {
        if (isRepeatSubmit(request)) {
          return false;
        }
        request.getSession(false).removeAttribute("token");
    }
  }
    return true;
  } else {
    return super.preHandle(request, response, handler);
  }
  }

  private boolean isRepeatSubmit(HttpServletRequest request) {
    String serverToken = (String) request.getSession(false).getAttribute("token");
    if (serverToken == null) {
      return true;
    }
    String clinetToken = request.getParameter("token");
    if (clinetToken == null) {
      return true;
    }
    if (!serverToken.equals(clinetToken)) {
      return true;
    }
      return false;
  }
}

然后在配置文件中配置好拦截器:注意这种方式在配置注解的处理器的时候需要配置:请求映射的方法处理器以及请求映射处理的适配器,如果使用

<bean
/>这个默认的会找不到方法处理器

  

<bean >
  <property name="interceptors">
    <list>
      <bean />
    </list>
  </property>
</bean>
<bean />

然后在需要生成token的方法上面添加@Token(save = true)

需要进行校验的方法上添加@Token(remove = true)

最后在显示页面上添加隐藏字段<input type="hidden" name="token" value="${token}" />

本文来自:

http://blog.icoolxue.com/submitted-by-spring-mvc-to-prevent-data-duplication/

以及

http://chenzhou123520.iteye.com/blog/1702563

结合

Spring太'激情'了.有好的文章希望能推荐推荐

如果有什么好的方案,希望各位朋友推荐推荐相互学习,多谢~~~




韩国六日游行程安排参考去韩国旅游跟团行程韩国旅游护照签证韩国旅游路线报价费用韩国旅游哪里好玩呢泉城欧乐堡焰火派对几点开始?齐河欧乐堡晚上有什么节目? 泉城欧乐堡梦幻世界五一期间开放夜场吗?泉城欧乐堡夜场时间? 五一去泉城欧乐堡什么地方好玩?齐河泉城欧乐堡有夜场吗? 泉城欧乐堡五一有什么好玩的活动?齐河欧乐堡游玩攻略? 春节想去泰国旅游,大概要多少钱? 去泰国象岛旅游有什么游乐活动?什么季节适合去? 曼谷唐人街怎么样?那里的华人会说普通话吗? 去迪拜旅游,两天的时间可以干什么? 春节去迪拜买化妆品贵吗?迪拜哪里买化妆品好? 迪拜有什么特产?迪拜有哪些特产? 马尔代夫满月岛是不是有免费矿泉水提供? 春节去新加坡好还是泰国好?各有什么特色? 2015清远牛鱼嘴三八妇女节门票多少钱?牛鱼嘴3.8女士门票优惠时间? 苏州三山岛 悠游诗画中 2015清远牛鱼嘴三八妇女节门票优惠活动?牛鱼嘴3.8女士门票价格? 千泷沟大瀑布交通?从化千泷沟大瀑布有直达车吗? TAJB106M016RNJ Datasheet TAJB106M016RNJ Datasheet TAJB226K016RNJ Datasheet TAJB226K016RNJ Datasheet 06035J1R5BBTTR Datasheet 06035J1R5BBTTR Datasheet 台湾旅游特产 台湾旅游特产 台湾旅游特产 天津旅游攻略2013 天津旅游攻略2013 天津旅游攻略2013 去冰岛旅游 去冰岛旅游 去冰岛旅游