gpt4 book ai didi

java - 阻止用户返回,但过滤器不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:50:42 25 4
gpt4 key购买 nike

我有一张付款表格。当用户提交表单时,支付过程成功运行,但单击后退按钮会将用户带到相同的表单。我想在成功提交后使表格过期,以防止用户多次付款(以防用户返回并提交表格)。正在关注Prevent user from going back教程,我添加了过滤器,但它对我不起作用。我究竟做错了什么?这是我为过滤添加的内容。

<filter>
<filter-name>paymentFilter</filter-name>
<filter-class>path to PaymentFilter class</filter-class>
</filter>
<filter-mapping>
<filter-name>paymentFilter</filter-name>
<url-pattern>/order/*/payment</url-pattern>
</filter-mapping>

我的过滤器类是

public class PaymentFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
httpServletResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0.
httpServletResponse.setDateHeader("Expires", 0); // Proxies.
System.out.println("In filter");
}

@Override
public void destroy() {
// TODO Auto-generated method stub
}

}

我已经添加了一个 System.out.println("In filter") 但在运行页面后我无法在控制台上看到它的输出("In filter")。

当我将 URL 模式用作 /* 时,System.out 打印在控制台上,

<url-pattern>/*</url-pattern> (it works as expected)

但是当我将 URL 模式更改为 /order/*/payment 时(* 是订单 ID,每个订单都会发生变化)。然后 System.out 不会在控制台上打印任何内容。

<url-pattern>/order/*/payment</url-pattern> (it doesn't work)

我正在使用spring mvc、apache、tomcat7.0

最佳答案

正如您自己已经发现的,* 只能是 url 模式的前缀或后缀。这样做的原因是,如果以其他方式定义,将会产生很多歧义。

此外,如果您使用 GET 提交表单,用户始终可以通过点击后退按钮转到结果屏幕。如果您使用 POST,浏览器会说这可能是不可能的。

关于java - 阻止用户返回,但过滤器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com