2012-05-03 51 views
1

我有一個JAX-RS 1.1的資源FooBar有它接受一個String之後的參數如下保護Java的Web應用程序(使用JAX-RS)對過大的HTTP請求

@Path("/foobar") 
public class FooBar { 

    @POST 
    public void doSomething(@FormParam("name") String name) { 
    //... 
    } 
} 

是可以保護的方法如果name比指定的最大值更長,這會被調用嗎?我想知道如果名稱的大小是1GB,它會發生什麼?

+0

明確目標:在我的Web客戶端中,我給HTML輸入字段設置了最大長度255。如果可能的話,我也希望在服務器端也有這個約束(POST可能來自惡意客戶端),而不用在doSomething方法中寫明確的長度檢查。 – jabal

回答

2

通常,您可以在ServletContainer上配置最大的發佈請求大小。例如,Tomcat在httpConnector指令中設置了maxPostSize。默認情況下,它在Tomcat中爲2 MB左右。

+0

這是一個更加全面的解決方案,實際上可能會更好,因爲應用程序中沒有任何內容會超過最大發布大小。但是,如果有文件上傳,最多2GB可能是合適的,但在doSomething()方法上不適用,這會過度約束。 –

1

通常你會使用過濾器。這裏的an example in Grails,and one in Ruby。這裏有一個教程,將顯示如何在Jersey中執行此操作。

+0

添加這樣的過濾器是一個壞主意,因爲servlet容器必須在較低級別上拒絕它。不在應用程序lvl – Anton

+0

根據問題中的信息,很難說Servlet容器應該如何。 –