SpringBoot實戰-Guns項目

項目導入

  1. zip包下載或git下載(zip下載不帶git)

  2. IDEA setting 設置代理(阿里代理)

  3. jar下載目錄更換默認目錄

  4. 不能識別項目(選中pom.xml 右鍵 )

  5. 打包成jar包或wav包

從代碼生成角度看項目結構(訂單 order)

  1. 生成的html文件在WEB-INF對應的模塊下(webapp/WEB-INF/view/order)

  2. 生成的js文件static目錄下(webapp/static/modular/order/)

  3. bean 在modular/system/modle/Order

  4. 數據操作 xml 及接口在 modular/system/dao/mapping 及上一級目錄

  5. 接口的實現類modular/order/service

  6. control(被html調用的增刪改查)類 在modular/order/controller


  • 結論

    1. 數據庫映射方式採用的mybatis xml方式配置(還有一種是註解)

    2. git遠程header怎麼移動?TODO

    3. 用的是mybatis-plus (中國人搞的 baomidou)

shiro 權限

  1. Shiro如何獲得輸入的用戶信息:(前後端關係 TODO)

  2. Shiro如何驗證用戶名密碼是否正確:ShiroRealm繼承AuthorizingRealm 覆寫doGetAuthenticationInfo方法,傳入的AuthenticationToken包含用戶名和密碼,根據用戶名查詢數據庫中完整用戶的信息

  3. 如何知道該用戶是否有相應的權限進行操作:(1).從數據庫讀取存儲權限:同上覆寫doGetAuthorizationInfo,在裏面根據用戶信息包含的role_id,連表sys_relation 和sys_menu通過menu_id查詢出對應的用戶擁有權限的url,放入集合。(2)如何判斷是否擁有權限:通過Permission註解AOP攔截(Shiro自帶有一個),在AOP裏面進行判斷

  4. session管理:分爲單機環境和多機環境,多機環境需要redis進行存儲(TODO進一步博客)

  5. cache緩存管理:EhCache,讀取xml配置,通過註解@Cache(TODO 進一步博客)

  6. 記住我CookieRememberMeManager

  7. 代碼編寫ShiroConfig(配置); ShiroRealm(封裝與數據庫連接細節) ;GunsUserFilter(緩存等過期設置);
  8. 擴展閱讀https://www.imooc.com/article/3369(session和cookie異同)

日誌系統

            1\. 獲取時機: 對方法進行BussinessLog註解 ,通過AOP攔截

            2\. 如何保存舊值:日誌進行修改或編輯時要保存舊值,在跳轉的時候進行值的臨時保存(LogObjectHolder)

            3\. 如何獲取: LogObjectHolder拿的對象,反射獲取屬性,進行循環,在循環裏攔截http請求參數,進行比較(如果碰到一些不好直觀看的的值,例如性別標識,F;M表示男,F表示女,則通過字典進行查詢)

            日誌分類:登錄登出日誌;業務日誌;異常日誌

            核心技術點:1.AOP;2.保存舊值;3.把無意義的字段值映射成可讀性強的值;異常統一處理(@ControllerAdvice 異常日誌)

分頁

MyBatis-Plus裏面分裝好了limit物理分頁 Page註解攔截識別

  1. 物理分頁(limit 數量比較大的情況)

  2. 邏輯分頁(全部查詢,然後進行分頁識別)

緩存

用在經常使用,以及key和value每次查詢的時候不變

  1. 經常用到的有Echace 和Redis

  2. 註解:

    1. Cacheable : 如果有先取出緩存(select)

    2. CachePut :放入緩存(save)

    3. CacheEvict :刪除緩存(update或delete)

    4. Caching:

  3. 註解參數

    1. Cacheable,CachePut :value,緩存名稱;key緩存鍵值 Condition SpEL (方法之前),Usless SpEL(方法之後)

    2. CaheEvict: value;key;Condition SpEL;等

  4. 緩存本地xml配置

  5. 常用的SPEL表達式

    1. args

    2. caches

    3. target

    4. targetClass

    5. method

    6. methodName

    7. result

代碼生成器

MyBatis數據攔截器(在不修改查詢語句的情況下進行攔截查詢。eg.部門查看範圍,只能允許查看自己部門或者子部門的數據)

  1. DataScope 數據範圍(sql參數)

  2. DataScopeInterceptor攔截

jwt

由服務器產生,當客戶端擁有,即擁有了服務器訪問的權限

  1. 組成:

    1. header+payload+signature

    2. header

  2. 過程:

    1. 服務端根據用戶名密碼,生成jwt和key返回給客戶端

    2. 客戶端把jwt 放入header的Authorization字段裏(前面加Bearer ),然後對要傳輸的數據進行base64加密,最後加上key進行md5加密,形成sign前面,形如({“object”:”base64(objectJson)”,”sign”:”md5(objectJson+key)"})

  3. 幾個關鍵類說明

    1. IRequestValidator:驗證身份(比如用戶名,密碼,驗證碼等)

    2. AuthCotroller:RequestMapping,對請求進行驗證,返回token和randomKey兩個字段的json

    3. AuthFilter:對客戶端請求的jwt token進行驗證過濾

      1. 拿出herader的Bearer字段,根據jwt判斷token是否過期
    4. WithSignMessageConverter:對數據進行校驗,判斷數據有沒有被篡改

      1. 取出header Authorization字段,根據該字段拿到key

      2. 取出object字段,並和key md5計算,得到本應該的sign

      3. 和傳過來的sign進行比較,如果相等數據沒有被篡改,不相等,即數據被篡改了

    5. DataSecurityAction:對數據進行加密(一方面是不可讀,另外一方面是保證json字段順序變化也認爲數據篡改)

    6. JwtTokenUtil:jwt常用的工具類

  4. 代碼組成

  5. WebConfig(註解Configuration和xml配置相似,相當於導出,可以通過@Autowired),關聯AuthFilter和DataSecurity

事務

  1. 事務的四大特性

    1. 原子性:要不全部完成,要不全部失敗

    2. 一致性:一旦全部完成或者失敗。確保業務處於一致的狀態(和原子性相似,着重的是狀態)

    3. 隔離性:有多個事務處理同樣的數據,每個事務都應該和其他事務隔離開

    4. 持久性:事務本地持久化,無論發生什麼樣的系統錯誤,都可以恢復回來

  2. 隔離性詳解

    1. 髒讀:讀取未提交的數據

    2. 不可重複讀:一個事務多次查詢返回的結果不一致

    3. 幻讀:一個事務批量修改表的所有數據,這時候另一個事務往表裏增加了一條記錄,導致第一個事務修改之後落了一條,就像是產生幻覺一樣。

  3. 隔離級別

    1. Serialozable(串行化)都不會發生

    2. Repeatable Read(可重複讀)默認,幻讀可能發生

    3. Read Commited(讀已提交)髒讀不會發生

    4. Read uncommitted(讀未提交)不能保證

  4. 傳播行爲(一個事務調用另外一個事務,須指定事務應該如何傳播)

    1. REOPAGATION_REQUIRED:

    2. REOPAGATION_SUPPORTS:

    3. REOPAGATION_MANDATORY:

    4. REOPAGATION_REUQIRES_NEW:

    5. REOPAGATION_SUPPORTED:

    6. REOPAGATION_NERVER:

    7. REOPAGATION_NESTED:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章