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

表单重复提交原理图

6e45afb6bdf3e6ed13d7b1db07b5355e.png

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

session存验证码

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

login.jsp

用户名:

密 码:

验证码:

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

c6223398f9a26272823585c313b38e74.png

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

a、使用重定向

2e42b686ed2fa17a570223305bbf8805.png

b、使用生成令牌配合token拦截器

d3abfccff28ad15926184e3a149951f4.png

68560d411f644ef7357d9aadfe3063bf.png

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

c、使用生成令牌配合tokensession拦截器

1aaf1d2ff45143ff6b72b67c7929e8ac.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以在Java中使用Servlet中的Filter过滤拦截提交的数据。Filter可以拦截HTTP请求和响应,并可以在请求到达目标资源之前或响应离开目标资源之前修改请求或响应。关于拦截提交的数据,您可以在过滤中通过HttpServletRequest对象获取请求的参数,进而对请求的参数进行处理或验证。 以下是一个简的示例代码,用于拦截POST请求并处理请求参数。在这个示例中,我们将验证提交的参数是否符合要求。 ```java public class FormFilter implements Filter { public void init(FilterConfig config) throws ServletException { // 初始化 Filter } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; if (httpRequest.getMethod().equalsIgnoreCase("POST")) { // 获取请求参数 String name = request.getParameter("name"); String email = request.getParameter("email"); // 验证请求参数是否符合要求 if (name != null && email != null) { if (name.length() > 0 && email.length() > 0) { // 参数符合要求,继续处理请求 chain.doFilter(request, response); return; } } // 参数不符合要求,返回错误页面 HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid form data"); return; } // 不是 POST 请求,直接继续处理请求 chain.doFilter(request, response); } public void destroy() { // 销毁 Filter } } ``` 您需要在web.xml文件中配置Filter,例如: ```xml <filter> <filter-name>FormFilter</filter-name> <filter-class>com.example.FormFilter</filter-class> </filter> <filter-mapping> <filter-name>FormFilter</filter-name> <url-pattern>/submit-form</url-pattern> </filter-mapping> ``` 在这个示例中,我们将拦截路径为/submit-form的POST请求,并验证请求参数是否符合要求。如果参数符合要求,继续处理请求;否则返回错误页面。您可以根据自己的需求修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值