Cheug's Blog

当前位置:网站首页 / JAVA / 正文

防止表单重复提交(拦截器)

2019-10-11 / JAVA / 1363 次围观 / 0 次吐槽 /

表单重复提交原理

image.png

1、Servelt表单重复提交的一种解决方案

session存验证码

比如在登录时,以通过验证码存在session来解决

login.jsp

<form action="${pageContext.request.contextPath}/LoginServlet" method="post">
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="password"><br>
验证码:<input type="text" name="code">
<img alt="" src="${pageContext.request.contextPath}/ValidateCodeServlet"><br>
<input type="submit" value="登录">
</form>

ValidateCodeServlet

@WebServlet("/ValidateCodeServlet")
public class ValidateCodeServlet extends HttpServlet {
 
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//创建验证码对象
ValidateCode code = new ValidateCode(100, 30,4,4);

//存储服务端验证码
request.getSession().setAttribute("serverCode", code.getCode());
System.out.println("ServerCode:" + code.getCode());

//响应客户端
code.write(response.getOutputStream());
}
}

LoginServelt

image.png

2Struts的表单重复提交解决方案

a、使用重定向

image.png

b使用<s:token/>生成令牌配合token拦截器

image.png

image.png

此种解决方式不太符合逻辑是产生了错误之后再告知用户,应该一停留在当前界面

c使用<s:token/>生成令牌配合tokensession拦截器

image.png

Powered By Cheug's Blog

Copyright Cheug Rights Reserved.