2012-05-04 27 views
1

我建立使用Spring框架3.1限制URL在Spring框架篡改3.1

我有我的控制器與代表一些ID包含URL路徑變量映射的應用程序。 但我不希望用戶篡改URL並手動更改路徑變量值。 我想限制他們這樣做。

我已經嘗試過使用ShallowEtagHeaderFilter。但它的運作方式並非如此。 我不知道我是否錯過了過濾器的任何配置或者根本沒有工作。

這裏是我的web.xml,我已經配置了調度器servlet和過濾器。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <filter> 
     <filter-name>encodingFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 

    <filter> 
     <filter-name>eTagFilter</filter-name> 
     <filter-class>com.abc.config.EtagFilter</filter-class> 
    </filter> 


    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <filter-mapping> 
     <filter-name>encodingFilter</filter-name> 
     <url-pattern>/</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
     <filter-name>eTagFilter</filter-name> 
     <servlet-name>dispatcher</servlet-name> 
    </filter-mapping> 

    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 

</web-app> 

請幫我這個。

在此先感謝。

回答

1

我不明白ShallowEtagHeaderFilter如何適合這張圖片,我想你誤解了它的功能。它應該通過從瀏覽器緩存中獲取頁面來減少網絡流量。這與你的情況完全不同。

基本上來說:如果你不想讓用戶篡改URL,你需要有一種方法來驗證URL是否是你的應用程序創建的,通常是某種算法的校驗和參數,這種算法不容易猜測。

例如/site/12/user/12345/aB其中aB基於/site/12/user/12345計算。現在,如果用戶將URL更改爲/site/13/user/12345/aB,那麼校驗和是錯誤的,您可以發送404或400或任何想要發送的錯誤。

我可能會執行校驗和檢查作爲過濾器,並編寫基於普通的URL創建了校驗和URL的實用方法(可能是你需要一個JSP標籤以及)

+0

帕特里克嗨..感謝快速回答。 我完全同意你,我誤解了功能。而且你的建議完全是我所需要的。 可以通過提供一個例子來解決這個問題嗎? –

+1

@JapanTrivedi校驗和算法並不是我的專業,但在維基百科上有關於它們的完整章節:http://en.wikipedia.org/wiki/Category:Checksum_algorithms。也許你可以從那裏開始,當你有更具體的問題時,回來尋求更多的幫助。 –

+0

謝謝帕特里克,這對我很有幫助。 :) –