讀古今文學網 > Maven實戰 > 12.2.2 account-service的主代碼 >

12.2.2 account-service的主代碼

account-service的目的是封裝下層細節,對外暴露盡可能簡單的接口。先看一下這個接口是怎樣的,見代碼清單12-3。

代碼清單12-3 AccountService.java

正如4.3.1節介紹的那樣,該接口提供5個方法。generateCaptchaKey()用來生成一個驗證碼的唯一標識符。generateCaptchaImage()根據這個標識符生成驗證碼圖片,圖片以字節流的方式返回。用戶需要使用signUp()方法進行註冊,註冊信息使用SignUpRequest進行封裝,這個SignUpRequest類是一個簡單的POJO,它包含了註冊ID、email、用戶名、密碼、驗證碼標識、驗證碼值等信息[1]。註冊成功之後,用戶會得到一個激活鏈接,該鏈接包含了一個激活碼,這個時候用戶需要使用activate()方法並傳入激活碼以激活賬戶。最後,login()方法用來登錄。

下面來看一下該接口的實現類AccountServiceImpl.java。首先它需要使用3個底層模塊的服務,如代碼清單12-4所示。

代碼清單12-4 AccountServiceImpl.java第1部分

三個私有變量來自account-persist、account-email和account-captcha模塊,它們都有各自的get()和set()方法,並且通過Spring注入。

AccountServiceImpl.java借助accountCaptchaService實現驗證碼的標識符生成及驗證碼圖片生成,如代碼清單12-5所示。

代碼清單12-5 AccountServiceImpl.java第2部分

稍微複雜一點的是signUp()方法的實現,見代碼清單12-6。

代碼清單12-6 AccountServiceImpl.java第3部分

signUp()方法首先檢查請求中的兩個密碼是否一致,接著使用accountCaptchaService檢查驗證碼,下一步使用請求中的用戶信息實例化一個Account對象,並使用accountPersistService將用戶信息保存。下一步是生成一個隨機的激活碼並保存在臨時的activateMap中,然後基於該激活碼和請求中的服務器URL創建一個激活鏈接,並使用accountEmailService將該鏈接發送給用戶。如果其中任何一步發生異常,signUp()方法會創建一個一致的AccountServiceExcpetion對象,提供並拋出對應的異常提示信息。

最後再看一下相對簡單的activate()和login()方法,見代碼清單12-7。

代碼清單12-7 AccountServiceImpl.java第4部分

activate()方法僅僅是簡單根據激活碼從臨時的activationMap中尋找對應的用戶ID,如果找到就更新賬戶狀態為激活。login()方法則是根據ID讀取用戶信息,檢查其是否為激活,並比對密碼,如果有任何錯誤則拋出異常。

除了上述代碼之外,account-service還包括一些Spring配置文件和單元測試代碼,這裡就不再詳細介紹。有興趣的讀者可以自行下載閱讀。

[1] 由於篇幅的原因,這裡不再給出源代碼,有興趣的讀者可以自行下載並查看本書源碼。