在Struts 1.x中是否存在可配置的方式,因此我的操作類只能在HTTP'POST'上執行。僅在Struts 1.x中將HTTP請求限制爲'POST'
我明白我可以在我的動作類中使用request.getMethod()
,然後以此爲基礎進行一定的「東西」。
問候, 喬納森
在Struts 1.x中是否存在可配置的方式,因此我的操作類只能在HTTP'POST'上執行。僅在Struts 1.x中將HTTP請求限制爲'POST'
我明白我可以在我的動作類中使用request.getMethod()
,然後以此爲基礎進行一定的「東西」。
問候, 喬納森
下面是與觀念,既一些方案和配置解決方案。您可以創建自定義的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" />
我基於這個舊的工作代碼,但我甚至沒有編譯上面的示例代碼。這樣在不改變應用程序的
一種方式是寫一個拒絕非POST請求的Servlet過濾器。然後,您可以將此過濾器插入到您的web.xml文件中,並配置其url-patterns以匹配您的Struts控制器的路徑。
您可以使用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>
麥克道威爾的答案遠遠不能接受,除非你有一些特定的要求。你應該得到一個503 HTTP錯誤,你可以捕獲它以向用戶顯示有意義的信息,或者將它留給實際的錯誤管理。
如果有人發送GET,你會發生什麼? – skaffman 2009-06-15 14:57:01
這只是一個簡單的數據捕獲應用程序,如果它是GET,我們不會將數據保存到數據庫。我只是想檢查是否有以編程方式以外的xml「可配置」方式。 – Jonathan 2009-06-15 16:03:56