防止表单重复提交(拦截器)
2019-10-11 / JAVA / 1436 次围观 / 0 次吐槽 /表单重复提交原理图
1、Servelt的表单重复提交的一种解决方案
session存验证码
比如在登录时,可以通过验证码存在session中来解决
login.jsp
Markup
<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
Java
@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
2、Struts的表单重复提交解决方案
a、使用重定向
b、使用<s:token/>生成令牌配合token拦截器
此种解决方式不太符合逻辑,它是产生了错误之后再告知用户,应该一直停留在当前界面
c、使用<s:token/>生成令牌配合tokensession拦截器
- 上一篇:OGNL
- 下一篇:Hibernate[一]
Powered By Cheug's Blog
Copyright Cheug Rights Reserved.