2012-03-26 116 views
0

我想知道如何使用GWT來隱藏存儲在服務器上的某些文件。我有密碼等數據庫,我需要將用戶從數據庫重定向到其他頁面。我該怎麼做呢?web.xml中的服務器端重定向?

我試圖改變的東西在web.xml:

<servlet-mapping> 
    <servlet-name>SomeServer</servlet-name> 
    <url-pattern>/actual_url</url-pattern> 
    <url-pattern>/database1.db</url-pattern> 
    <url-pattern>/database2.db</url-pattern> 
</servlet-mapping> 

而且

<servlet-mapping> 
    <servlet-name>SomeServer</servlet-name> 
    <url-pattern>/actual_url</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>SomeServer</servlet-name> 
    <url-pattern>/database1.db</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>SomeServer</servlet-name> 
    <url-pattern>/database2.db</url-pattern> 
</servlet-mapping> 

兩者都允許在應該像他們actual_url訪問的servlet,但我仍然可以訪問database1.db和database2.db。

我知道我可以使用Apache的.htaccess隱藏這些文件,但我更喜歡GWT解決方案。有人有什麼主意嗎?

此外,如果任何人都可以找到web.xml的參考,它將不勝感激。我已經搜尋了一點點,但什麼都沒找到。

編輯:經過多一點測試後,我發現有時第二種方法有時會起作用,有時候並非如此。不知道爲什麼或在什麼情況下。

+1

這與GWT無關。 GWT只是客戶端; GWT-RPC和RequestFactory是簡單的servlet,沒有什麼特別的。 – 2012-03-26 09:33:42

+0

好的,謝謝。我是使用GWT和servlet的新手,沒有意識到這一點。 – Zarjio 2012-03-26 14:25:48

回答

2

如果你不想讓某些文件被客戶端訪問,最好的方法是不要部署它們,或者將它們部署在你的戰爭的WEB-INFMETA-INF特殊文件夾中。

如果你有他們的WEB-INF外部署,那麼你可以使用security-constraints限制對它們的訪問:

<security-constraint> 
    <display-name>Denied</display-name> 
    <web-resource-collection> 
     <web-resource-name/> <!-- mandatory, but can be empty --> 
     <url-pattern>/database1.db</url-pattern> 
     <url-pattern>/database2.db</url-pattern> 
     <!-- alternatively, you could simply use: 
     <url-pattern>*.db</url-pattern> 
     --> 
    </web-resource-collection> 
    <auth-constraint> 
     <!-- an empty but not absent auth-constraint denies everyone --> 
    </auth-constraint> 
</security-constraint> 

請注意,如果你使用的AppEngine,靜態文件是專門服務,和您的web.xml不適用於他們,除非您將它們列在您的appengine-web.xml(請參閱http://code.google.com/appengine/docs/java/config/webxml.html#Servlets_and_URL_Paths中的註釋,並參見http://code.google.com/appengine/docs/java/config/appconfig.html#Including_and_Excluding_Files中的註釋)

0

就我而言,GWT的服務器端代碼是純Java EE。所以看起來,您只需查看Java EE規範即可找到答案。
另一個建議是將數據庫訪問servlet部署在一個單獨的應用程序中。這將允許您使用另一臺服務器(實際或虛擬)並以這種方式設置其連接屬性,以使其他人無法訪問它。
祝你好運!