2010-01-13 53 views
1

對於在線錯誤報告Web應用程序,我需要找到任何用戶如何向Google App Engine應用程序中的Servlet提交錯誤報告(使用HTTP POST)的方式,而所有其他Servlet(應用程序管理界面)均爲受保護的,以便它們只允許訪問使用Google account登錄的用戶。該應用程序在/ *處運行,並且如果使用Google帳戶保護此URL,則沒有身份驗證的servlet將不可用,並且似乎無法從身份驗證中排除URL。授予公衆對一個GAE servlet的訪問權限,但對所有其他資源使用身份驗證?

所以這應該是受保護的:

<url-pattern>/*</url-pattern> 

雖然這應該是公開的:

<url-pattern>/addbugreport</url-pattern> 
  • 只是一個解決方法的想法:在應用程序的所有servlet(除公衆一個)可以檢查用戶是否已經登錄(並且如果未登錄則轉發到登錄頁面)

回答

1

如果url-patterns比聲明性安全性更重要;將用戶檢查作爲servlet Filter(映射到'/*')來執行。這將以一種乾淨的方式將安全性與請求處理邏輯分開。

1

將受保護資源置於與公衆不同的上下文(目錄)中(在web.xml中使用servlet-mapping)。如果公共資源位於'/'中,請將該受保護文件放在'/admin'中,並且僅爲該上下文定義一個security-contraint(也位於web.xml中)。

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>admin resources</web-resource-name> 
    <url-pattern>/admin/*</url-pattern> 
    <http-method>*</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>admin</role-name> 
    </auth-constraint> 
</security-constraint> 

如果嚮應用程序添加更多受保護的上下文,則還需要爲它們定義安全約束。

+0

看到我的編輯,實際上我想讓受保護的管理界面位於/並將公共的可用servlet放在/ newbugreport - 但也許只能放棄此計劃並遵循您的建議,所以+1 – mjn 2010-01-16 21:39:27

+0

如果url模式比聲明式安全更重要;將用戶檢查作爲servlet Filter(映射到'/ *')來實現。這將以一種乾淨的方式將安全性與請求處理邏輯分開。 – mafro 2010-01-17 09:18:05

+0

好主意 - 它是一個Wicket應用程序,所以它已經是一個過濾器,並且向它添加一些安全邏輯代碼應該很容易。您能否將您的評論添加爲答案,以便我可以接受它? – mjn 2010-01-17 13:26:42

相關問題