2009-06-15 93 views
6

在Struts 1.x中是否存在可配置的方式,因此我的操作類只能在HTTP'POST'上執行。僅在Struts 1.x中將HTTP請求限制爲'POST'

我明白我可以在我的動作類中使用request.getMethod(),然後以此爲基礎進行一定的「東西」。

問候, 喬納森

+0

如果有人發送GET,你會發生什麼? – skaffman 2009-06-15 14:57:01

+0

這只是一個簡單的數據捕獲應用程序,如果它是GET,我們不會將數據保存到數據庫。我只是想檢查是否有以編程方式以外的xml「可配置」方式。 – Jonathan 2009-06-15 16:03:56

回答

3

下面是與觀念,既一些方案和配置解決方案。您可以創建自定義的ActionMapping ...

public class YourPOSTRequiredActionMapping extends ActionMapping { } 

...在你的Struts應用配置爲僅是POST的映射。

<action path="/your/path" type="YourAction" className="YourPOSTRequiredActionMapping" /> 

然後,您可以擴展支柱的RequestProcessor並覆蓋processMapping

public class YourRequestProcessor extends RequestProcessor { 
    protected ActionMapping processMapping(HttpServletRequest request, HttpServletResponse response, String path) throws IOException { 
     ActionMapping mapping = super.processMapping(request, response, path); 
     if (mapping instanceof YourPOSTRequiredActionMapping) { 
      if (!request.getMethod().equals("POST")) { 
       mapping = null; 
      } 
     } 
     return mapping; 
    } 
} 

確保配置您的支柱配置使用YourRequestProcessor。

<controller processorClass="YourRequestProcessor" nocache="true" contentType="text/html; charset=UTF-8" locale="false" /> 

我基於這個舊的工作代碼,但我甚至沒有編譯上面的示例代碼。這樣在不改變應用程序的

2

一種方式是寫一個拒絕非POST請求的Servlet過濾器。然後,您可以將此過濾器插入到您的web.xml文件中,並配置其url-patterns以匹配您的Struts控制器的路徑。

5

您可以使用web.xml定義訪問權限。這個限制可以防止GET請求:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>struts action servlet</web-resource-name> 
     <url-pattern>*.do</url-pattern> 
     <http-method>GET</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <!-- no one! --> 
    </auth-constraint> 
    </security-constraint> 
0

麥克道威爾的答案遠遠不能接受,除非你有一些特定的要求。你應該得到一個503 HTTP錯誤,你可以捕獲它以向用戶顯示有意義的信息,或者將它留給實際的錯誤管理。