43
kaif.io open source (/z/sysop)

完整的程式碼: github1

kaif.io 主要開發平台是 Java + SpringBoot + Dart 組成的。經過三個月的開發,累積的程式量也是有點多了,不曉得爬起程式碼來會如何?

雖然這個網站用了傳統的 Spring+Java+PostgreSQL 的組合,不過在網站的登入、驗證這領域,用了異於常態的方式實作 -- 即不使用 cookie,完全靠放在 http header 的 access token 來處理。會嘗試這樣做的目標是希望網站完全的 stateless 不依賴 session/cookie。目前看來實作上雖然麻煩了一點,但還是可以做的到的。有興趣的人可以爬爬相關部份的程式碼 (一大部份是用 Dart 寫的)

網頁動態的部份,完全交給 Dart 來實作了。Dart 是個好語言,寫起來很順很快,不過平台上比較薄弱一點。kaif.io 使用 Dart 時,完全放棄使用 Dart 平台相關的 framework/library,直接用 dart 語言硬刻。寫完這麼一輪後,其實只要架構組織的夠好,即使只用純語言,開發上也是很快,結構也完整。而且,因為完全的掌握程式碼,不會有和 framework 拉据的問題。

PostgreSQL 方面,kaif.io 只用 spring 的 jdbc template,而不是用 ORM framework。ORM 我們寫了好幾年了,知道有痛苦之處,所以現在反而都傾向捨棄它們,直接手刻 SQL 比較能達到我們想要的成果。kaif.io 這次寫了很多 WITH statement,這番實作還挺有趣的,而這也是用 ORM 做不到的事。

開發工具就是 Vagrant + Intellij IDEA。由 Ansible provision 一台 Vagrant 做為開發的資料庫,這現在已經是我們開發時必備的工具了。Intellij IDEA 自然是 Java 開發的好幫手,不用多說。Dart 的開發現在也都是掛 plugin 在 IDEA 裡開發,很順。只是要 setup 整個環境步驟多了一點。github 裡有一些 setup的說明,如果有問題的話可以發問。

暫時先這樣~

changyuheng 積分 0

請問有 token 放在 header 和 cookies 的安全性資料嗎?

IngramChen 積分 3

cookies 的安全性已經是千錘百鍊,很多洞都測出來了,但也是千瘡百孔。稍有不慎就中獎了。

token 放 header 實做的人少,破的人也少 (因為做法都有點不大一樣),所以理論上相對安全一點,但是網站大到有專人來破解,那也是很危險。

通常要真的安全 server 還是會有 session 供比對吧。

qrtt1 積分 0 編輯於

auth 看起來是放在 HandlerMethodArgumentResolver1 的時候,看起來比加 WebSecurityConfigurerAdapter 簡單多了(上個月也寫了一樣的東西,看網上範例就寫得複雜了些),如果 kaif 早點 open 也許我就會學習使用這樣簡便的設計 :)

IngramChen 積分 0

這不是標準的作法啊。但是 spring security 的作法太麻煩了,所以 oauth integration 最後自己刻比較簡單。

HandlerMethodArgumentResolver 的話,每個需要處理 auth 的 handler method ,就一定要帶 ClientAppUserAccessToken ,忘記寫的話,就是漏洞了。(有些 method 不需要 user,然後就會忘了寫)

為了這個漏洞,有另外寫一個 unit test1 去掃所有 method,看有沒有漏掉這個 argument。

這個是 OAuth API 的部份, web 用的 ajax API 又作了另一套類似的... orz

qrtt1 積分 0

嗯,我們就是用那個麻煩的做法,不過最終還是需要寫個 HandlerMethodArgumentResolver 讓開發者在需要的時候,自動地取到 user Orz.

IngramChen 積分 2

對了,因為程式碼是今年寫的。所以全程都是 Java8 ,程式裡能套用 Java8 特性的地方,全部都用了。有興趣可以看看

hitakeane 積分 0

ORM 的確很痛苦, 雖然寫起來很方便. 雖然不寫 java, 但 opensource 值得鼓勵~

popcorny 積分 0

請容許小弟一跪 Orz

Blake 積分 0

跟著跪.......

atpqq 積分 0

看到好多 sql,感覺可以直接用 Liquibase1 做版控, 加個幾行 註解2 就可以了。

atpqq 積分 0

我指的是 deploy 下的 sql :D

beneo 積分 0

我不同意ORM很痛苦,复杂的SQL走搜索,搭建一个elasticsearch,简单的CRUD直接ORM

IngramChen 積分 0

每個人經驗都不一樣啦