同步器令牌的主要思想是:用一个共享令牌来监控请求流程及客户端对特定资源的访问。
我们可以用同步器令牌来控制客户端的请求提交,不允许重复提交同一个请求。在处理一个刚到达的请求之前,需要先对同步器令牌进行比对。在处理请求之后,将响应准备好并发至客户端之前,需要生成并保存一个新的令牌值。
本文采用的例子基于Spring框架:
比如要新增一条工作流程信息,需要经过两个步骤:
1、请求add.do?name=flow,控制器将其转发到新增流程页面。
protected ModelAndView showForm(HttpServletRequest request,
HttpServletResponse response, BindException errors, Map controlModel)
throws Exception
{
//You business code
// 保存令牌值
saveToken(request);
return this.showForm(request,errors,"addFlowView",controlModel);
}
2、填写完工作流程信息后,点击提交执行控制器的onSubmit方法。
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception
{
if (isTokenValid(request, true)) {
// 有效请求
//执行保存操作
} else {
//无效提交
resetToken(request);
erros.reject("errorPageView");
}
//转向流程列表页面
return new ModelAndView("listRedirectView","crudMeta",crudMeta);
}
我们可以用同步器令牌来控制客户端的请求提交,不允许重复提交同一个请求。在处理一个刚到达的请求之前,需要先对同步器令牌进行比对。在处理请求之后,将响应准备好并发至客户端之前,需要生成并保存一个新的令牌值。
本文采用的例子基于Spring框架:
比如要新增一条工作流程信息,需要经过两个步骤:
1、请求add.do?name=flow,控制器将其转发到新增流程页面。
protected ModelAndView showForm(HttpServletRequest request,
HttpServletResponse response, BindException errors, Map controlModel)
throws Exception
{
//You business code
// 保存令牌值
saveToken(request);
return this.showForm(request,errors,"addFlowView",controlModel);
}
2、填写完工作流程信息后,点击提交执行控制器的onSubmit方法。
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception
{
if (isTokenValid(request, true)) {
// 有效请求
//执行保存操作
} else {
//无效提交
resetToken(request);
erros.reject("errorPageView");
}
//转向流程列表页面
return new ModelAndView("listRedirectView","crudMeta",crudMeta);
}