我正在創建GWT應用程序並希望添加管理控制檯。GWT實現管理控制檯的最佳方式
我第一次嘗試創建一個管理員窗口(窗口小部件),然後就顯示出它時,管理員登錄項。
這種方法的問題在於,每一個用戶訪問我的網頁下載負責顯示和操作管理控制檯的JavaScript - 我不喜歡這個主意,無論是性能和安全性的原因。
由於管理控制檯只是一個「窗口」我的應用程序裏面 - 我希望當他註銷下載它僅當用戶作爲管理員,在「清除」它登錄。
什麼是我可用的選項來實現使用GWT?
我正在創建GWT應用程序並希望添加管理控制檯。GWT實現管理控制檯的最佳方式
我第一次嘗試創建一個管理員窗口(窗口小部件),然後就顯示出它時,管理員登錄項。
這種方法的問題在於,每一個用戶訪問我的網頁下載負責顯示和操作管理控制檯的JavaScript - 我不喜歡這個主意,無論是性能和安全性的原因。
由於管理控制檯只是一個「窗口」我的應用程序裏面 - 我希望當他註銷下載它僅當用戶作爲管理員,在「清除」它登錄。
什麼是我可用的選項來實現使用GWT?
代碼分裂是快速正骯髒的解決方案移動管理的東西了面向客戶的JS的;然而,任何熟悉w/gwt的人都會知道如何訪問未下載的代碼拆分。
真正安全的選擇是運行第二個入口點併爲管理員編譯。這樣,您的服務器可以避免任何涉及管理功能的任何事物。
將所有管理功能放到主編譯中不允許的包中也是明智的做法;這樣,你永遠不會泄露不安全的資源。
使用自己的管理控制檯活動創建單獨的視圖。您可以使用Activities and Places design pattern。
此外,您還可以使用code-splitting以確保只有管理員加載必要的管理控制檯的代碼。
編輯:
在您的入口點類,你應該檢查是否有用戶進行身份驗證,併爲admin,允許或不允許訪問您的應用程序的這一部分。你也應該在服務器端做同樣的事情。當用戶註銷時,關閉該應用程序。
不錯,但我怎麼能強制加載代碼,以「淨化」當用戶註銷?我應該爲所有頁面刷新 - 這樣代碼會再次下載而沒有管理部分? – bennyl
在您的入門級課程中,您可以(也應該)檢查用戶是否已通過身份驗證,並且是管理員,並允許訪問您的應用的此部分或不允許訪問。你也應該在服務器端做同樣的事情。當用戶註銷時,關閉該應用程序。 –
順便說一下,刷新頁面時代碼不會再次「下載」 - 它會被瀏覽器緩存。但是,緩存這個管理代碼並沒有什麼壞處 - 如果認證檢查失敗,它將無法訪問/使用。 –
對阿賈克斯的解決方案的後續行動,更多的一些細節&選項:
讓我檢查我是否正確理解它,我有一個主要版本 - 這是每個客戶端加載的頁面,當客戶端以管理員身份登錄時,我將他重定向到與正常用戶頁面不同的頁面,但是與管理控制檯鏈接,這個頁面實際上是一個不同的編譯gwt模塊,我是對嗎?如果是這樣,我怎麼能不讓用戶在第一個地方打開管理啓用頁面? – bennyl
是的,如果您想要第二個入口點包含第一個入口點,那麼您需要更改第一個入口點,以將除<入口點...>之外的所有東西都放入不同的.gwt中.xml,比如說,Inherit.gwt.xml。因此,主入口點繼承了com.foo.Inherit,並添加了客戶端入口點。 Admin入口點可以繼承相同的通用模塊,擴展客戶端入口點並添加管理功能。 – Ajax
至於安全性,這取決於你的服務器環境。一個窮人的安全方法是在你的管理入口點建立一個陷阱。延遲調用應用程序,直到將密碼輸入到文本字段中。這將爲您帶來一些運行時安全性,儘管好的黑客可以查找您正在測試的字符串鍵。最好發送一個哈希值。也就是說,使用某種字符串操作來混淆該值。你甚至可以只用一堆你+在一起的字符,這樣整個密碼就不是純文本的,所有人都可以看到。 – Ajax