day25(令牌机制)

令牌机制

    作用:处理页面重复提交,造成数据多次写入数据库。

    使用方法:

        类似于验证码机制,使用session记录一个不可能重复的值(Uuid)在访问controller时对session进行校验。

        

	    
          //获取session存储的值
String sessionToken = request.getSession().getAttribute("token").toString();
          //获取隐藏域中提交的数据 String ptToken = request.getParameter("token");
          //非空校验和相等判断 if (null==sessionToken||null==ptToken||!ptToken.equals(sessionToken)) {
               //令牌不相符,则直接进行转发,不需要进行对数据库提交数据 request.getRequestDispatcher("ProductFindAllServlet").forward(request, response); return ; }

  在提交的jsp页面中必须将token值放入session中

  
<!--UuidUtils.getUuid() 是产生随机序列号-->
<% request.getSession().setAttribute("token", UuidUtils.getUuid()) ;%>

  UuidUtils类

import java.util.UUID;

public class UuidUtils {
	public static String getUuid(){
		String uuid = UUID.randomUUID().toString();
		return uuid;
	}
}

    注意事项:

      1.在jsp页面中需要提交session中的值

       位置:form表单中 写一个隐藏表单  用来提交session中的值

<input type="hidden" value="${sessionScope.token }" name="token"/>

      2.异常处理(NullPointerException)

        解决方式:对于有可能产生的非空字段进行判断。

if(null==sessionToken||null==ptToken)
{

}