日了 各种看不懂 求大神解惑

走你_ 2017-07-08 10:44:51
我看了一篇文章 讲的是springmvc 防止表单重复提交,大概内容是 它定义了个注解 然后定义个springmvc的拦截器
然后在拦截器里判断。
原文:http://blog.csdn.net/u013378306/article/details/52944780
我看不懂的地方就是这里:
public class FormTokenInterceptor extends HandlerInterceptorAdapter {  

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) // 这里这里这里
//handler 是我访问的目标action 我是用@Controller注解,
//这个类跟HandlerMethod啥关系也没有
//所以一直是false 啥情况
{
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
FormToken annotation = method.getAnnotation(FormToken.class);
if (annotation != null) {
boolean needSaveSession = annotation.save();
if (needSaveSession) {
request.getSession(false).setAttribute("formToken", UUID.randomUUID().toString());
}
boolean needRemoveSession = annotation.remove();
if (needRemoveSession) {
if (isRepeatSubmit(request)) {
return false;
}
request.getSession(false).removeAttribute("formToken");
}
}
return true;
} else {
return super.preHandle(request, response, handler);
}
}

private boolean isRepeatSubmit(HttpServletRequest request) {
String serverToken = (String) request.getSession(false).getAttribute("formToken");
if (serverToken == null) {
return true;
}
String clinetToken = request.getParameter("formToken");
if (clinetToken == null) {
return true;
}
if (!serverToken.equals(clinetToken)) {
return true;
}
return false;
}
}
...全文
378 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
走你_ 2017-07-15
  • 打赏
  • 举报
回复
引用 6 楼 wanghaojava 的回复:
注意红色用法的部分说明
好吧 我懂了 水平太菜一开始没看出来
JavaDev716 2017-07-10
  • 打赏
  • 举报
回复

注意红色用法的部分说明
JavaDev716 2017-07-10
  • 打赏
  • 举报
回复
人家的意思是自定义一个@FormToken 注解,然后拦截器里判断是否有FormToken 这个注解,可懂?
那年花 2017-07-10
  • 打赏
  • 举报
回复
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        if (handler instanceof HandlerMethod) // 这里这里这里
        //handler 是我访问的目标action 我是用@Controller注解,
        //这个类跟HandlerMethod啥关系也没有
        //所以一直是false 啥情况 
他这段代码的意思是 通过判断handler 是否HandlerMethod里面的一个实例如果 handler 是 HandlerMethod的一个实例,则 instanceof 运算符返回 true。如果 handler 不是指定类的一个实例,或者 handler 是 null,则返回 false。 HandlerMethod定义的就是你要验证的类或者那个类的子类 是一个class handler 定义的是一个object对象 是你要去匹配特定类的object对象
什么都不能 2017-07-08
  • 打赏
  • 举报
回复
其实也没你说的那么复杂吧首先 1.生成一个散列码的token存到session里,再放到form里 2.提交表单的时候从request里获取token和session里的token作比较,token一致提交,不一致对不起,你这个请求是非法的。 3.提交成功清除掉session里的token
什么都不能 2017-07-08
  • 打赏
  • 举报
回复
引用 2 楼 beyond789654 的回复:
[quote=引用 1 楼 hanpoyangtitan的回复:]其实也没你说的那么复杂吧首先 1.生成一个散列码的token存到session里,再放到form里 2.提交表单的时候从request里获取token和session里的token作比较,token一致提交,不一致对不起,你这个请求是非法的。 3.提交成功清除掉session里的token
别的方法我知道 我只是说我这个列子 各种不理解啊[/quote] 什么别的方法,你在说什么...
走你_ 2017-07-08
  • 打赏
  • 举报
回复
引用 1 楼 hanpoyangtitan的回复:
其实也没你说的那么复杂吧首先 1.生成一个散列码的token存到session里,再放到form里 2.提交表单的时候从request里获取token和session里的token作比较,token一致提交,不一致对不起,你这个请求是非法的。 3.提交成功清除掉session里的token
别的方法我知道 我只是说我这个列子 各种不理解啊

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧