發表文章

記帳專案說明

圖片
新專案說明 最近開新的專案,目前專案的系統架構和後端處理的差不多了,剩下前端的部分正在一邊學 react 一邊完成中,考慮到最近要開始找工作了,所以想說寫個部落格一邊介紹目前專案的架構與紀錄目前的狀態。 專案整體架構 在開始之前我們先發一張架構圖吧,接下來請把架構圖當成地圖開始冒險吧。 這次的專案主要是走雲原生的概念,下述我們分成基礎設施、前端、後端來聊吧 基礎建置 雲端服務廠商選擇: AWS 這個專案從剛開始設計就是預計上雲且使用的是 aws,主要有兩個點 我們家並沒有固定 IP ,如果要走地端的話勢必要使用到 DDNS ,那牽涉的範圍就會更廣了,因此決定直接上雲 根據網路上查到的資料,目前 aws 市佔 33% ,考慮到將來要找工作與方便尋找資料因此決定直接使用 aws 用到的 AWS 服務 接下來先概覽一下用到的服務與相關功能,下面會以使用者接觸到服務的順序來說明: 服務名稱 用途 router53 DNS, 用於將 domain 轉換成 IP, 我的 domain 也是在該服務購買的 彈性 IP 當我們租了 AWS 的伺服器時是沒有對外 IP 的,因此我們需要透過彈性 IP 申請並且綁定到我們的 EC2 安全群組 連到伺服器的防火牆,可以設定每個 port 是否要開啟,並且設定白名單等 EC2 這個就是我租伺服器的本體,所有的服務與反向代理等都是放在這裡 EC2 建置了哪些服務 這邊會講一下我安裝與使用到哪些非我開發的服務 資料庫: 資料庫的部分我使用的是 mariaDB, 會選擇 mariaDB 的原因除了他是 MySQL 的分支之外,他的社群很活躍、穩定性也很高 catch: catch 的部分我使用 redis ,主要適用於處理會需要經常取得資料或者不需要持久化的資料,目前我主要用於記錄使用者登入後的 token,由於採取的是前後端分離的架構,後端會需要頻繁的驗證 token 和透過 token 取得用者資訊,因此這部分得資料就放在 redis,更詳細的使用邏輯將會在後面提到後端的時候說明。 SSL: 這個專案的 SSL 主要用於 https 連線,這部分是使用 Let's Encrypt 家的憑證。 會用 Let's Encrypt 的原因最主要是免費和自動化申請,如果考慮到...

基本 Spring security 快速入門

圖片
基本 Spring security 快速入門 最近學了 spring security 遇到一些 6 版和舊版的一些差異,所以想說寫一下快速入門,但有些前情提要: 這個入門不包含 spring security 的使用概念,關於這部分相當推薦閱讀 spring security 實戰這本書 本快速入門不包含 OAuth2 和權限控管,只會使用 Basic 驗證,但建議先學會入門之後再加深. 由於個人專案有使用到 swagge ,因此也會有相對的教學 主要使用到的 spring security 元件: org.springframework.security.authentication.AuthenticationProvider org.springframework.security.crypto.password.PasswordEncoder org.springframework.security.core.userdetails.UserDetailsService org.springframework.security.core.userdetails.UserDetails 撰寫 UserDetailsService 首先先在 service 新增 class 並且 implements UserDetailsService 實作的時候會發現需要實作: UserDetails loadUserByUsername ( String username ) throws UsernameNotFoundException ; 依照 function name 可以知道要實現的功能是去 DB 或 redis 之類的地方取得使用者資訊,並且將資料放進 UserDetails 後 return 出去,因此在開始寫 loadUserByUsername 方法之前需要先實作 UserDetails 實作 UserDetails 實作的時候會發現我們需要實作 getAuthorities getPassword getUsername isAccountNonExpired isAccountNonLocked isCredentialsNonExpired isEnabled 基本上依照 functio...

SpringDoc 教學-入門

圖片
最近在幫 Hana 引擎加入 openAPI3(swagger3),想說寫個教學文章。 預計會有兩篇文章漸進式的說明如何導入 openAPI3,分別是: 如何導入 openAPI3 如何客製化 swagger 的網頁內容,如標題、和 API 分組。 今天的文章是如何快速導入 openAPI3 ,並且設定各 API 的說明和 request response 設定 example。 正文 主要有三個步驟: 導入 springDoc lib 和顯示網頁 設定 controller、API 說明 設定 request 、 response 參數說明與 example 讓我們一個一個開始吧。 ヽ(✿゚▽゚)ノ 步驟1: 導入 springDoc lib 和顯示網頁 首先所有的 java lib 都是到 maven repository 取得,因此我們只要到 maven repository 尋找 SpringDoc OpenAPI Starter WebMVC UI ,或者按這個網址: https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui 打開網址 -> 選擇版本就可以看到下面的圖片,在紅色框框中依照專案的依賴管理工具,選擇自己需要的格式並且複製下來。 因為 Hana 引擎是使用 gradle ,因此我複製 gradle 下來並添加到自己專案的 build.gradle (如果是 maven 的話就是 pom.xml) 。 添加依賴之後啟動 spring boot,啟動後開瀏覽器到該專案的網址並且在後面加上 /swagger-ui/index.html#/ 就可以看到專案導入 openAPI 了。 步驟2: 設定 controller、API 說明 在上圖我們可以看到 save-data-controller 和 chat-controller 事實上這兩個都是 springDoc 依照 controller class name 的駝峰顯示出來的。 步驟 2-1 修改 contoller 說明 我們接下來要把它改成看得懂的說明。 其實非常簡單,只要在該 controller 前面加上 tag annotations 就好了,如...

程式設計補完計畫(一): mybatis

程式設計補完計畫(一): mybatis 因為一些原因我發現自己一直以來都只有在寫程式,沒有認真想過為甚麼要用這個 Lib 或框架。 因此想透過這個系列重新審視自己身邊常用的 Lib。 第一集我想要先聊 Mybatis,基本上所有跟 ORM 有關的開發我都會用 Mybatis 去處理,但沒有認真探討過為甚麼要用和甚麼時候用。 那就先開始吧。 簡介(來自 wiki) MyBatis 不是物件與資料庫表關聯,而是將Java方法與SQL語句關聯。MyBatis允許使用者充分利用資料庫的各種功能,例如儲存程序、視圖、各種複雜的查詢以及某資料庫的專有特性。如果要對遺留資料庫、不規範的資料庫進行操作,或者要完全控制SQL的執行,MyBatis是一個不錯的選擇。 優點: 先將優點列出之後一項一項說明 sql 與 Java 程式碼分離 MyBatis支持許多高級映射和存儲過程,使得更複雜的數據庫操作更容易。 MyBatis支持基於Spring、Guice等框架的注入,這意味著可以更輕鬆地集成到現有的應用程序中。 由於 Mybatis 需要直接寫 sql,因此可以做更細和更複雜的 sql 操作。 提供緩存機制,在搜尋資料時可以提高效率。 sql 與 Java 程式碼分離 MyBatis 可以將 sql 寫在另外的 xml 檔案中,也可以透過 annotation 寫 sql ,因此不會看到還先用 String 組成 sql 後執行的情況發生。 MyBatis支持許多高級映射和存儲過程,使得更複雜的數據庫操作更容易。 MyBatis 在 xml 中提供了,if, where 等語法,讓 sql 在組合時會更簡單,例如透過 <if> 判斷特定變數是否為 null ,如果是 null 就不要加入 set 裡面。 <where> 和 <if> 搭配的話就可以很簡單的組合出 where 條件...

向傳統複雜宣戰 -- 超簡單快速安裝 JDK

圖片
應該大部分的人在學 JDK 之前都會遇到一件事情: 安裝 JDK 好麻煩,官方說明要下載東西又要改系統參數。 會有這個問題的通常是 Windows 電腦會遇到,因為大部分的 Linux 和 Mac 都只要下好指令就安裝好了, 但這個問題滿早就有解決方法了。 開始安裝 首先到 Microsoft 的 Java 下載網站:  https://learn.microsoft.com/zh-tw/java/openjdk/download  ,依照你要的 Java 版本的 msi 檔開始下載。 下載完成之打開它,並且一直按下一步下一步就可以安裝完成了。 如何驗證安裝完成? 我們打開 Powershell 或傳統 cmd,在裡面輸入  java -version ,看到下面的圖片的話就是安裝完成。 結語 是不是簡單很多很多呢? 安裝的步驟只有兩步而已,超簡單但很少人分享。 如果你喜歡這樣簡單的安裝的話,把這個文章分享出去吧。