2019年11月14日 星期四

Spring Boot情境式網站開發指南:使用Spring Data JPA、Spring Security、Spring Web Flow(出版中,2020/06上架)

書名(暫定,依實際出版為主) :

Spring Boot 情境式網站開發指南 

:使用Spring框架Data JPA、Security、Web Flow

--------------------------------------------------------------------------------------------------


書封文案:

如何讓網站使用者有更佳的體驗一直是歷久不衰的話題。使用Spring Web Flow框架讓使用者在預先定義好的情境裡,逐步被引導完成複雜操作,我們稱為情境式網站。
伴隨企業資料上雲,物聯網、智慧型手機的普及,資安事件也逐年攀升;網路攻擊的頻率不再屈指可數,已經成為企業營運的日常威脅。OWASP統計的TOP 10攻擊模式提供企業資安防禦的方向,使用Spring Security框架加上簡易設定就可以築起堅實城牆。
Spring框架是Java語言裡最熱門的框架。打造一個功能強大、資訊安全的網站,使用Spring MVCSpring SecuritySpring Data JPA,再搭配Spring Boot以簡化設定並快速布署幾乎已經是業界開發標準。
本書介紹Spring框架模組的運作機制,書末專案實作結合Spring Web Flow以提升使用者操作體驗,完整呈現新一代企業網站的建置策略。

--------------------------------------------------------------------------------------------------

內容(暫定,依實際出版為主) :

Part 1:Java專案管理


第1章 Maven入門 (約45頁,已完成)


1.1 認識Maven的專案管理思維與架構
1.1.1 Maven的安裝和設定
1.1.2 Maven Repository

1.2 認識Maven的基本操作
1.2.1 使用maven-archetype-quickstart模板建立Java SE專案
1.2.2 使用maven-archetype-webapp模板建立Java Web專案
1.2.3 Maven專案的生命週期

1.3 結合Maven與Eclipse
1.3.1 Eclipse內建Maven
1.3.2 使用Eclipse以Maven建立Java SE專案
1.3.3 使用Eclipse以Maven建立Java Web專案
1.3.4 使用Eclipse匯入Maven專案


Part 2:Spring Data JPA


第2章 JPA與資料庫 (約108頁,已完成)

2.1 JPA介紹

2.2 JPA基礎
2.2.1 Persistence Unit與persistence.xml
2.2.2 Persistent Context、EntityManager與Entity生命週期管理
2.2.3 第一級快取(L1 Cache)
2.2.4 EntityManager與Transaction

2.3 Entity的繼承(Inheritance)設計
2.3.1 使用SINGLE_TABLE策略
2.3.2 使用JOINED策略
2.3.3 使用TABLE_PER_CLASS策略
2.3.4 比較SINGLE_TABLE、JOINED、TABLE_PER_CLASS差異

2.4 Entity的關聯(Relationships)設計
2.4.1 使用OneToOne設計
2.4.2 使用OneToMany設計
2.4.3 使用ManyToMany設計與自定義的欄位型態
2.4.4 FetchType與CascadeType

2.5 指定主鍵(Primary Key)值
2.5.1 主鍵(Primary Key)使用單一欄位且內容為流水號
2.5.2 主鍵(Primary Key)使用複合欄位

第3章 使用JPQL查詢語言 (約105頁,已完成)


3.1 使用JPQL基本語法
3.1.1 WHERE敘述的條件值使用字面常量(Literal)
3.1.2 ORDER BY
3.1.3 DISTINCT
3.1.4 WHERE敘述的條件值使用繫結變量(Bind Variable)
3.1.5 使用建構子敘述封裝複數欄位查詢結果
3.1.6 使用TUPLE封裝複數欄位查詢結果

3.2 使用JOIN
3.2.1 INNER JOIN
3.2.2 LEFT OUTER JOIN
3.2.3 FETCH JOIN
3.2.4 欄位型態為Map的Join

3.3 在WHERE敘述使用比較關鍵字
3.3.1 BETWEEN
3.3.2 IN
3.3.3 LIKE
3.3.4 NULL
3.3.5 ENPTY
3.3.6 MEMBER OF

3.4 使用聚合(Aggregation)函式
3.4.1 AVG()、COUNT()、MAX()、MIN()、SUM()
3.4.2 GROUP BY 

3.5 使用子查詢(Subquery)
3.5.1 子查詢
3.5.2 EXISTS
3.5.3 ALL與ANY

3.6 使用JPQL函式
3.6.1 字串函式
3.6.2 數學函式
3.6.3 日期函式

3.7 其他
3.7.1 集合物件型態的欄位處理方式
3.7.2 CASE WHEN

3.8 使用UPDATE敘述

3.9 使用DELETE敘述 



第4章 Criteria API入門 (約15頁,已完成)


4.1 Criteria API簡介
4.1.1 Criteria API的使用方式
4.1.2 使用Metamodel API塑模Entity類別

4.2 使用Criteria API建立型態安全(Typesafe)的查詢
4.2.1 使用CriteriaQuery物件建立查詢
4.2.2 使用from()建立查詢基礎
4.2.3 使用join()查詢Entity間的關聯性
4.2.4 使用Expression/Path物件瀏覽查詢欄位
4.2.5 使用Expression/Predicate物件限制查詢條件
4.2.6 使用orderBy()與groupBy()管理查詢結果
4.2.7 使用TypedQuery物件執行查詢


第5章 使用Spring Data JPA讓ORM更聰明 (約35頁,已完成)

5.1 Spring與ORM

5.2 Spring與JPA
5.2.1 設定EntityManagerFactory
5.2.2 開發JPA基礎的Repository/DAO類別

5.3 使用Spring Data JPA自動建立Repository物件
5.3.1 定義查詢方法
5.3.2 定義客製查詢
5.3.3 混合客製與基礎查詢



Part 3:Spring Security


第6章 OWASP高風險資安漏洞介紹 (約105頁,已完成)


6.1 OWASP組織與OWASP TOP 10介紹

6.2 OWASP資安工具介紹

6.3 OWASP TOP 10介紹
6.3.1    注入攻擊(Injection)
6.3.2    不當的對話管理(Session Management)
6.3.3    不當的身分驗證(Broken Authentication)
6.3.4    跨站腳本攻擊(Cross-Site Scripting/XSS)
6.3.5     不當的存取控制(Broken Access Control)
6.3.6     不當的安全性設定(Security Misconfiguration)
6.3.7     暴露機敏資料(Sensitive Data Exposure)
6.3.8     對於攻擊自覺不足(Insufficient Attack Protection)
6.3.9     跨站請求偽造(Cross-Site Request Forgery, CSRF)
6.3.10  使用不安全的元件(Using Components with Known Vulnerabilities)
6.3.11  未受防護的APIs(Under-protected APIs)
6.3.12  XML外部解析器漏洞(XML External Entity, XXE)
6.3.13  不安全的反序列化漏洞(Insecure Deserialization)

6.3.14  記錄與監控不足風險(Insufficient Logging & Monitoring)




第7章 使用Spring Security建構安全的網站 (約47頁,已完成)

7.1  Spring Security入門
7.1.1      了解Spring Security模組
7.1.2      啟用Spring Security
7.1.3      建立簡單的安全設定

7.2  選擇使用者資訊儲存機制
7.2.1      使用IN-MEMORY儲存機制驗證身分
7.2.2      使用關聯式資料表進行身份驗證
7.2.3      使用客製方式驗證使用者身分

7.3  資源請求的攔截處理
7.3.1      使用Spring Expressions Language進行保護
7.3.2      使用HTTPS加密通道
7.3.3      防護跨站請求偽造(cross-site request forgery, CSRF)

7.4  客製登入表單頁面
7.4.1      指定登入頁面
7.4.2      啟用記憶使用者(remember-me)功能
7.4.3      登出(logout)機制

7.5 保護JSP呈現的資訊
7.5.1      使用Spring SecurityJSP標籤函式庫


Part 4:Spring Boot 


第8章 使用Spring Boot簡化Spring開發 (約45頁,已完成)


8.1 Spring Boot簡介

8.2 使用Spring Boot開發專案
8.2.1 以Spring Initializr建立Spring Boot的WAR專案
8.2.2 以啟動器(Starter)簡化專案關聯(Dependencies)
8.2.3 以自動化設定(Auto-configuration)簡化專案設定
8.2.4 啟動Spring Boot的WAR專案
8.2.5 以設定的日誌(Logging)參數輸出紀錄
8.2.6 建立Spring Boot的JAR專案並啟動
8.2.7 Spring Boot的JAR、WAR專案差別

8.3 使用Spring Boot執行器取得網站執行狀況
8.3.1 執行器(Actuator)簡介
8.3.2 啟用和設定Spring Boot執行器
8.3.3 使用Spring Boot執行器預設端點(Endpoints)
8.3.4 建構Spring Boot執行器客製端點(Endpoints)




Part 5:Spring Web Flow 


第9章 Spring Web Flow  實作 (約45頁, 已完成)

9.1   情境式系統設計

9.2   設定Spring Web Flow
9.2.1  設定流程建構者(Flow Builder)
9.2.2  設定流程登錄檔(Flow Registry)
9.2.3  設定流程執行器(Flow Executor)
9.2.4  處理流程請求

9.3   建構Spring Web Flow
9.3.1  狀態(States)
9.3.2  轉換(Transitions)
9.3.3  資料(Data)

9.4   綜合實做:蛋糕訂購流程
9.4.1  定義蛋糕(Cake)訂購的主流程
9.4.2  定義客戶(Customer)相關的子流程
9.4.3  定義訂單(Order)相關的子流程
9.4.4  定義付款(Payment)相關的子流程
9.4.5  以Spring Security實作存取管控