我有一個web應用程序,用戶可以在其中創建他們的帳戶並使用該服務。現在我想給他們一個自定義域設施,其中 app.customer1web.com points_to myservice.com與userid customer1 一旦他建立自定義域,對於世界看起來像我的服務正在他的機器上運行。 許多服務,如博客,wp.com,tumblr給 這個功能。如何給saas軟件提供cname向前支持
我該怎麼做? 我正在使用java編寫我的web應用程序。 如何在請求進入時將域名映射到用戶ID?
我有一個web應用程序,用戶可以在其中創建他們的帳戶並使用該服務。現在我想給他們一個自定義域設施,其中 app.customer1web.com points_to myservice.com與userid customer1 一旦他建立自定義域,對於世界看起來像我的服務正在他的機器上運行。 許多服務,如博客,wp.com,tumblr給 這個功能。如何給saas軟件提供cname向前支持
我該怎麼做? 我正在使用java編寫我的web應用程序。 如何在請求進入時將域名映射到用戶ID?
如何在請求進入時將域名映射到用戶ID?
顯然,您必須在某處存儲該信息,很可能存儲在數據庫中。
添加數據庫表domains
與列:
添加唯一的密鑰(名稱,活動)以確保域名被映射一次。
當客戶嘗試添加一個域時,添加一個active = NULL並挑戰設置爲隨機字符串的行。
向客戶顯示隨機字符串,並要求他們在網站上放置一個網頁或創建一個虛擬DNS記錄來驗證域名所有權(這是Google Apps的做法)。
您可以通過向管理聯繫人發送電子郵件或以其他方式驗證所有權。
當客戶說他按照您的指示在第2步中做了什麼時,請驗證它並設置active = 1,challenge = NULL。
如果該域先前對某個其他客戶有效,請刪除這些記錄或將active設置爲0。
要求客戶爲其域添加CNAME記錄並將其轉發到您的域,例如, hosted.myservice.com
(Google使用Google Apps的ghs.google.com
)。
當一個請求進來,做
SELECT customerId FROM domains WHERE name=:requestDomain AND active=1
一個更好的辦法可能是自動提供你的客戶在<customername>.myservice.com
,除了格式的域名自定義域。這給你兩個好處:
不願意使用自己的域的客戶仍然可以自定義他們的登錄頁面,例如,與一個公司商標。
對於自定義域,您可以要求客戶將它們轉發到<customername>.myservice.com
而不是通用的hosted.myservice.com
。
這使您能夠在多臺服務器之間水平分配客戶,而無需要求客戶在其端點上更改任何內容。例如,您可以讓客戶選擇是否希望他們的帳戶託管在歐盟或美國。當他們改變它時,只需傳輸他們的數據並更新<customername>.myservice.com
。他們的自定義域將自動工作。
要做到這一點,你必須建立一個通配符DNS記錄*.myservice.com
(除非您還需要後者的功能,在這種情況下,你必須要管理個人記錄)。
我不太清楚,如果我真的明白你想做什麼,但我試圖給你一個可能的解決方案(至少對於你的問題的Java部分)。
一種可能性是以每個請求由單個Servlet(web.xml)處理的方式設置應用程序服務器。這個servlet可以找出請求的URL(HttpServletRequest.getRequestURI)並提取用戶名。然後你知道用戶,並可以將這些信息用於任何你想做的事情。
請注意,有很多DNS的東西涉及到你想做的事情! (至少車費,我理解這一點。)你可以使用
一種解決方案是建立爲您的應用WildCard DNS Record,並讓應用程序本身檢查RequestURI看到用戶對未來在什麼主機名。
我知道這是一個非常模糊的答案,但它聽起來像設置了WildCard記錄,使用單個函數檢查主機名是最佳選擇。這樣,每次客戶註冊時都不必設置DNS記錄,並且您有更多時間去做其他事情,比如爲應用程序添加新功能!
我認爲這是一個很好的答案。我學到了東西,謝謝Jaka! – Upgradingdave 2009-12-16 21:10:12