亚州天堂爱爱,做爱视频国产全过程在线观看,成人试看30分钟免费视频,女人无遮挡裸交性做爰视频网站

? ? ?

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

來源:https://mp.weixin.qq.com/s/TJwh1YrUmEDRCwYHcXl3Vg

有很多讀者都希望我出一些詳細介紹 Java 實戰類項目的文章,畢竟項目實戰經驗還是挺重要的,不論是對于找工作還是提高個人工程能力。我自己也發現很多讀者不怎么會學習開源項目,不知道如何把開源項目的一些精華為自己所用。

我們這里分析的是 eladmin[1] 這個基于 Spring Boot Spring Security JPA Vue 的前后端分離的后臺管理系統。

薦過這個項目。

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

后臺首頁

開源工具庫

這部分簡單分析一下項目使用到的一些比較有用的開源工具庫:MapStruct(Java 對象映射框架)OSHI(基于 JNA 的操作系統和硬件信息庫)Hutool(Java 工具類庫)

MapStruct

MapStruct[2] 不僅能夠在 bean 之間復制屬性,還能夠在不同類型之間自動轉換。

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

相比于其他常見的映射框架, Dozer、Orika、ModelMapper、JMapper,MapStruct 的性能更好。

OSHI

OSHI[5] 是一款為 Java 語言提供的基于 JNA 的(本機)操作系統和硬件信息庫。

通過 OSHI ,我們不需要安裝任何其他本機庫,就能查看內存和 CPU 使用率、磁盤和分區使用情況、設備、傳感器等信息。

OSHI 旨在提供一種跨平臺的實現來檢索系統信息,支持 Windows、Linux、MacOS、Unix 等主流操作系統。

使用 oshi 你可以輕松制作出項目常用的系統監控功能,如下圖所示:

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

Hutool

Hutool[6] 一個非常實用的 Java 工具類庫,對文件、流、加密解密、轉碼、正則、線程、XML 等 JDK 方法進行了封裝。

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

小技巧

這部分內容會簡單分析一下從這個開源項目中看到的一些亮點以及小技巧。

優化表命名

根據項目不同的 Module 作為表名的前綴,這樣看起來更加直觀。

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

巧用 AOP 簡化代碼

AOP(Aspect-Oriented Programming:面向切面編程) 能夠將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任(例如事務處理、日志管理、權限控制等)封裝起來,便于減少系統的重復代碼降低模塊間的耦合度提高系統可拓展性和可維護性

這個項目中就大量使用了 AOP 思想。簡單舉兩個例子吧!

日志記錄

利用 AOP 方式記錄日志,只需要在 controller 的方法上使用 @Log("") 注解,就可以將用戶操作記錄到數據庫,源碼可查看 eladmin-logging這個 Module。。

@Log("新增用戶")@PostMapping(value = "/users")public ResponseEntity create(@Validated @RequestBody User resources){    checkLevel(resources);    return new ResponseEntity(userService.create(resources),HttpStatus.CREATED);}

Redis 限流

利用 AOP 方式對接口進行限流,只需要在 controller 的方法上使用@Limit("") 注解即可,源碼可查看 eladmin-common這個 Module。

/** * 測試限流注解,下面配置說明該接口 60秒內最多只能訪問 10次,保存到redis的鍵名為 limit_test, */@AnonymousGetMapping@ApiOperation("測試")@Limit(key = "test", period = 60, count = 10, name = "testLimit", prefix = "limit")public int test() {     return ATOMIC_INTEGER.incrementAndGet();}

基于 RBAC 的權限模塊設計

系統權限控制采用 RBAC 基于角色的權限訪問控制(Role-Based Access Control) 思想(一種最常見的權限管理思想,在一些對于全權限控制要求比較嚴格的系統會使用到)。

什么是 RBAC 呢?

簡單地說:一個用戶可以擁有若干角色,每一個角色有可以被分配若干權限這樣,就構造成“用戶-角色-權限” 的授權模型。在這種模型中,用戶與角色、角色與權限之間構成了多對多的關系,如下圖

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

RBAC

在 RBAC 中,權限與角色相關聯,用戶通過成為適當角色的成員而得到這些角色的權限。這就極大地簡化了權限的管理。

本系統的權限設計相關的表如下(一共 5 張表,2 張用戶建立表之間的聯系):

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

通過這個權限模型,我們可以創建不同的角色并為不同的角色分配不同的權限范圍(菜單)。

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

自定義權限驗證方式

Spring Security 提供了Spring EL表達式,允許我們在定義接口的方法上面添加注解來實現權限控制。比如下面的接口表示用戶擁有 adminmenu:edit 權限中的任意一個就能能訪問update接口。

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

但是,由于每個接口都需要給超級管理員放行,所以單純使用這種注解的方式每次都需要重復的添加 admin 權限、

因此我們可以加入自定義權限驗證方式,在驗證的時候默認給擁有 admin 權限的用戶放行。

源碼:

// eladmin-common -> me.zhengjie.config.ElPermissionConfig@Service(value = "el")public class ElPermissionConfig {    public Boolean check(String ...permissions){        // 獲取當前用戶的所有權限        List<String> elPermissions = SecurityUtils.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());        // 判斷當前用戶的所有權限是否包含接口上定義的權限        return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch(elPermissions::contains);    }}

使用方式:

@ApiOperation("查詢任務執行日志")@GetMapping(value = "/logs")@PreAuthorize("@el.check('timing:list')")public ResponseEntity<Object> queryJobLog(JobQueryCriteria criteria, Pageable pageable){    return new ResponseEntity<>(quartzJobService.queryAllLog(criteria,pageable), HttpStatus.OK);}

對應的數據庫內容如下:

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

審計功能

在這個項目中,繼承了 BaseEntity 的類會自動寫入創建時間、修改時間、創建人、更新人這些數據。

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

簡單介紹一下上面涉及到的一些注解:

  1. @CreationTimestamp : 創建對象的時候自動生成時間戳。
  2. @UpdateTimestamp:創建對象的時候自動生成時間戳。
  3. @CreatedBy :表示該字段為創建人,在這個實體被 insert 的時候會設置值,@LastModifiedBy同理。

審計功能對應的配置類:

SpringBoot前后端分離后臺管理系統分析,真香(springboot springsecurity前后端分離)

可優化點

  1. 可以考慮使用阿里開源的 easyexcel 來做 Excel 的導入導出,避免 OOM。
  2. 可以參考 《實際項目中我們是這樣做異常處理的》[7] 對項目全局異常處理部分進行優化。
  3. 一些重復代碼可以抽取出來,比如eladmin-common 模塊中的 BaseDTO.javaBaseEntity.javatoString()方法。
  4. 項目的 json 解析庫用到了 fastjson。實際上,我更推薦使用 Spring 默認的 JSON 解析庫 Jackson。這兩者中, Fastjson 的代碼質量以及設計更差,并且,經常被爆出有安全漏洞(設計問題)。雖然 Fastjson 在速度方面稍稍取勝,但是,速度方面的優勢不太明顯,影響不大。
  5. 可以使用 Caffeine 來做本地緩存。

后記

我發現很多人對于開源項目的態度就是:克隆下來就簡單玩玩功能就算了。

我覺得這樣不太好。你把項目克隆下來之后,首先肯定是自己體驗一下系統的核心功能。體驗了核心功能之后,你可以分析分析項目代碼,檢查一下有沒有 bug,看看有沒有可以優化的代碼/模塊,思考一下有沒有需要完善的功能模塊……。我在自己分析、調試這個開源項目的時候,就發現了一個小 bug 并提交了相應的 issue (目前已經被采納)。

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

(0)
上一篇 2023年7月31日 上午9:13
下一篇 2023年7月31日 上午9:29

相關推薦

  • 峨眉山符溪鎮:黨建引領 促鄉村振興

    中新網四川新聞8月22日電 (劉剛 黃谷子)近年來,樂山市峨眉山市符溪鎮以抓黨建促鄉村振興為著力點,將黨建引領同組織賦能、集體經濟、示范帶動相結合,積極探索黨建引領與產業發展深度融…

    科研百科 2024年6月9日
    48
  • 文科的科研項目(文科科研項目中途退出會怎么樣)

    文科科研項目中途退出會怎么樣 在文科科研項目中,中途退出是一個常見的問題。盡管這些項目通常需要長時間的投入和努力,但中途退出可能會對項目的進度和成果產生重大影響。本文將探討文科科研…

    科研百科 2024年8月3日
    30
  • 科研項目人員貢獻

    科研項目人員是現代科學領域的中堅力量,他們的工作不僅關系到科技進步,更關系到人類福祉。科研項目人員的貢獻是不可估量的,他們在科學領域做出了許多重要的貢獻。 科研項目人員的貢獻體現在…

    科研百科 2024年10月25日
    0
  • 下載VMware虛擬機:打造全能多系統桌面,讓IT技術探索觸手可及!(vmware虛擬機 下載)

    下載VMware虛擬機:打造全能多系統桌面,讓IT技術探索觸手可及!(vmware虛擬機 下載) 一、滲透測試工程師為什么選擇VMware虛擬機: 1. 隔離性: 在虛擬機環境中進…

    科研百科 2024年3月23日
    72
  • 圖書館開發系統項目管理

    圖書館開發系統項目管理 圖書館開發系統項目管理是一個復雜的過程,需要仔細的規劃和執行。它涉及到多個方面的工作,包括技術選型、需求分析、系統設計、開發、測試和部署等。在這篇文章中,我…

    科研百科 2025年7月1日
    1
  • 做項目管理系統的軟件

    做項目管理系統的軟件 隨著現代商業的迅速發展,越來越多的公司和組織開始使用項目管理系統來幫助他們更好地管理項目和員工。一個有效的項目管理系統可以提高項目效率,減少錯誤,降低成本,并…

    科研百科 2025年6月17日
    0
  • 科研項目分哪些種類

    科研項目的分類 科研項目可以根據許多不同的標準進行分類。下面列舉一些常見的分類方式: 1. 按照研究內容分類: – 自然科學項目:涉及科學理論、自然現象、科學技術的應用…

    科研百科 2025年2月28日
    1
  • ××小區物業服務管理方案(模板分享)(小區物業管理服務方案范本)

    ××小區物業服務管理方案 一、總體規劃 為了搞好××小區的物業管理服務,提升本企業物業管理水平,為業主營造一種舒適的居住環境,特制定本方案。 二、服務準則 (一)標準服務時間 周一…

    2022年6月20日
    336
  • win項目管理系統軟件

    Win項目管理系統軟件 隨著現代軟件開發越來越復雜和規模越來越大,項目管理系統軟件變得越來越重要。Win項目管理系統軟件是一種功能強大的軟件,可以幫助開發人員更好地管理項目進度、質…

    科研百科 2025年6月7日
    1
  • 項目庫房管理系統

    項目庫房管理系統 隨著現代企業規模不斷擴大,企業的存儲需求也在不斷增加。為了滿足這種需求,企業需要建立一套完整的項目庫房管理系統。這種系統可以幫助企業有效地管理其存儲資源,提高存儲…

    科研百科 2025年6月22日
    0