2012-11-24 28 views
3

我有付款表單。當用戶提交表單時,付款流程成功運行,但單擊後退按鈕會將用戶轉到相同的表單。我想在成功提交後終止表單,以防止用戶多次付款(如果用戶返回並提交表單)。 正在關注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")但我不能看到運行頁面後,其輸出(「過濾器」)在控制檯上。

當我使用的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的,阿帕奇,tomcat7.0

+0

檢查/order/*/payment是否正確。 –

+0

---/order/161778 /付款是我從地址欄複製的示例網址。 – Shahzeb

+0

如果用戶需要通過幾個小部件批量提交付款,會出現什麼問題? –

回答

1

什麼給了我的問題的解決方案是我「不能」在我的url-patter用戶正則表達式過濾器映射。 *只能用作後綴或前綴。

1

嘗試通過增加

chain.doFilter(request, response); 

在doFilter方法的最後一行。

+0

謝謝你的迴應,我添加了該行,但沒有工作。正如你可以看到我已經添加了一個system.out,但即使它不在控制檯上打印, – Shahzeb

+0

你有多少個過濾器? – Suranga

+0

我暫時只有一個過濾器。 – Shahzeb

2

正如你自己已經發現的,*只能是url-pattern的前綴或後綴。這樣做的原因是,如果定義了其他方面,會產生很多模糊性。

此外,如果您使用GET提交表單,用戶總是可以通過點擊後退按鈕進入結果屏幕。如果您使用POST,瀏覽器會說這可能不可行。

+0

感謝您的回覆,我正在使用信息提交表單。 – Shahzeb

2

我有你的問題的備用解決方案。您可以嘗試使用javascript或jquery來禁用後退或前進按鈕。

+0

感謝您的回覆,最初我使用的是JavaScript,但沒有達到要求。 – Shahzeb