Ch11-2 : Setting

[Setting]
這個小節,我們會根據前個小節的資料表(Table)設計。

這段落會按照順序,介紹整個登入相關檔案,與他們的目錄架構。之後第三個小節會介紹每隻程式所負責的用途,來完成我們的登入功能。


build.sbt
這次我們需要新增Springaop jar檔,協助我們去使Aop相關技術。
note:這邊要特別注意一點是,Play本身部份程式有使用到Spring相關jar檔,這邊建議使用的版本跟您的PlaySpring版本一致,減少可能發生的問題。
EX:Play 2.5.4使用的Spring的版本是4.2.4.RELEASE

...
  // Spring Aop
  "org.springframework" % "spring-aop" % "4.2.4.RELEASE"
....


Html
登入頁面。

app
└ views
  └ web
    └ loginSignup               
       └ login.scala.html <-登入頁面


pojoservices
會員登入,需要新增相關的pojo類別與調整現有services,來完成登入功能。

app
└pojo
   └web
     └request
        └AuthRequest.java   <--- 會員登入請求
     └ServerCache.java      <--- 伺服器暫存資料
       UserCookie.java       <--- 瀏覽器使用者的Cookie資料
       UserRole.java         <--- 登入的使用者角色類型
       UserSession.java      <--- 對應到表單紀錄的Session資料
└services
  └Impl
     └WebServiceImpl.java   <--- 實做WebService的新功能
  └WebService.java          <--- 新增UserSession的新增資料與查詢功能  
└conf
 └services
   └WebService.xml          <--- 新增user_session相關SQL


Aop
Aop是一種設計理念,全名為Aspect-Oriented Programming,它可以協助我們去掌控這個方法執行前,執行中,執行後等等,需要做什麼特別處理,這邊先大致知道Aop相關檔案程式擺放的目錄即可。

app
└annotation
  └AuthCheck.java               <---Java註解,可以把它在方法身上,執行登入檢查
└aop
  └advice
    └BeforeAndAfterAdvice.java  <---共用的Before與After 的Advice
  └AfterBlocker.java             <---執行後動作
    AuthBlocker.java              <---執行檢查
    BeforeBlocker.java            <---執行前動作
    CommonBlocker.java            <---共用Aop套件程式
└modules
  └AopModule.java                <---Aop的Module,讓Play一執行時,可以讓我們Aop代理程式常駐
└utils
  └Utils_Session.java             <---公用Session程式,處理一些Session整理與轉換
└enc
  └AESEncrypter.java             <---ASE加密程式


application.conf
我們Aop採用modules方式載入,需要在對應的conf設定要啟用這個服務。

...
play.modules.enabled += "modules.AopModule"
...


app/controller
WebController.java,新增登入檢查。

@AuthCheck
public Result doLogin(){
  ...
  return ok("登入成功");
}

// 登出
public Result logout(){
  new Utils_Session().clearClientCookie(response());
  return redirect(controllers.routes.WebController.index().url());
}


routes
針對我們登入與登出,需要對應的執行網址。

# http://127.0.0.1:9000/web/login
GET        /web/login                  controllers.WebController.login()

# http://127.0.0.1:9000/web/login
POST    /web/login                  controllers.WebController.doLogin()

# http://127.0.0.1:9000/web/logout
POST    /web/logout                  controllers.WebController.logout()



[Final]
重頭戲要開始了,挑戰從下個小節開始!

results matching ""

    No results matching ""