亚州天堂爱爱,做爱视频国产全过程在线观看,成人试看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

相關推薦

  • 重慶市科研項目

    重慶市科研項目 近年來,隨著科技的不斷發展,重慶市科研項目也在不斷涌現。本文將介紹一個重慶市科研項目,即“基于深度學習的醫學圖像診斷”。 醫學圖像診斷是醫療領域中非常重要的一項工作…

    科研百科 2025年2月5日
    1
  • 黨總支副書記黨齡有要求沒

    黨總支副書記黨齡有要求沒黨總支副書記黨齡有要求沒二編者:新學期剛過,這屆學生數量逐年增長,少先隊員們工作加強了。本學期已經組織了十幾個部門對中小學生開展了有關愛國教育、愛國主義教育…

    科研百科 2024年11月20日
    2
  • 團委5×4工作法討論

    團委5×4工作法討論 團委5×4工作法是一種針對團委部門內部工作的創新方法,旨在提高工作效率和團隊凝聚力。在這篇文章中,我們將探討團委5×4工作法的背…

    科研百科 2024年11月13日
    0
  • 工程項目管理的資質

    工程項目管理資質 工程項目管理是一個復雜而重要的過程,需要專業的管理人員和技能來確保項目的順利進行和高質量交付。然而,隨著項目的不斷復雜化,越來越多的公司開始重視工程項目管理的資質…

    科研百科 2024年9月22日
    34
  • 科研項目驗收會會議記錄

    科研項目驗收會會議記錄 會議時間:2023年2月18日 會議地點:實驗室 會議主持人:XXX 參加人員: – 項目經理XXX– 技術專家XXX–…

    科研百科 2025年2月5日
    4
  • 項目管理和售后服務系統

    項目管理和售后服務系統:提升客戶滿意度的關鍵 隨著市場競爭的加劇,企業需要更好地管理項目和售后服務,以提高客戶滿意度和市場競爭力。傳統的項目管理和售后服務方式已經無法滿足現代商業的…

    科研百科 2025年1月22日
    0
  • “密云e黨建”APP正式上線運行!(密云e黨建手機客戶端)

    “密云e黨建”推廣現場會 6月28日,“密云e黨建”推廣現場會在密云區會議中心召開。“密云e黨建”是加強對黨員的教育、管理和服務,實現黨建工作網上網下聯動,推動基層黨建工作的手機A…

    科研百科 2024年7月3日
    41
  • 科研項目總體流程圖模板

    科研項目總體流程圖模板 科研項目總體流程圖模板是一種用于描述科研項目流程的圖形化工具。通過模板,您可以輕松地了解科研項目的整個流程,包括研究計劃、數據采集、數據分析、結果呈現和項目…

    科研百科 2025年5月22日
    1
  • 最新教育科研項目

    最新教育科研項目 隨著科技的不斷進步,教育領域也在不斷地探索新的科研項目。最近,一項名為“智能教育平臺”的科研項目引起了人們的廣泛關注。 智能教育平臺是一種基于人工智能技術的教育解…

    科研百科 2025年4月8日
    2
  • 信息系統項目管理辦法

    信息系統項目管理辦法 為規范信息系統項目的管理,提高項目管理的科學性、規范化和效率,保障項目的質量、安全和可持續發展,我部制定了《信息系統項目管理辦法》(以下簡稱“辦法”)。 辦法…

    科研百科 2024年10月8日
    12