Spring-boot Security實戰

安全無小事,當我們的Spring-boot應用上線之後,如何做用戶認證以及授權呢?

在Spring的生態中,Spring Security 提供了基於javaEE的企業級安全服務。那麼今天我們就用它來做認證和授權吧。

先上效果,以及附上代碼地址:

https://github.com/onlyonezhongjinhui/spring-boot-security.git
  • 我們這裡設置了兩個用戶(lucifer、admin),分別擁有權限是lucifer:ROLE_USER, admin:ROLE_ADMIN、ROLE_USER。

Spring-boot Security實戰

接口與權限

  • 沒登錄前默認調到登錄頁面

Spring-boot Security實戰

登錄頁面

  • admin用戶登錄後可以訪問所有接口

Spring-boot Security實戰

admin登錄

Spring-boot Security實戰

訪問home接口

Spring-boot Security實戰

訪問admin接口

Spring-boot Security實戰

訪問foo接口

  • lucifer用戶登錄後只能訪問部分接口home、foo接口,訪問admin接口會受限

Spring-boot Security實戰

訪問home接口

Spring-boot Security實戰

訪問foo接口

Spring-boot Security實戰

訪問admin接口

怎麼達到這樣的效果呢?各位看官,抓穩,要開車啦

  • 應用結構

Spring-boot Security實戰

代碼結構

  • Spring Security的內部註冊了12種過濾器,層層處理,這樣我們可以根據我們的需求定製,如果沒定製的話就使用默認過濾器。這裡就不展開了,大家有興趣的可以調試研究源碼。

Spring-boot Security實戰

Security過濾器

  • Security認證的方式可以多種多樣,自定義認證方式只需要實現AuthenticationProvider接口並註冊到AuthenticationManager中即可。

Spring-boot Security實戰

自定義認證Provider

  • 自定義provider會去調用UserDetailsService的loadUserByUsername方法去加載用戶,一般我們的用戶、權限信息都保存在數據庫,所以這裡就使用Mybatis進行查詢加載用戶、權限信息。

Spring-boot Security實戰

UserDetailsService

  • 用戶驗證通過後,需要返回用戶、權限信息往下傳遞。這個信息需要封裝在實現了UserDetailsService接口的Bean。

Spring-boot Security實戰

UserDetailsService

  • 加載用戶、權限信息使用Mybatis很方便

Spring-boot Security實戰

Mapper

  • 自定義認證失敗處理器,實現AuthenticationFailureHandler接口

Spring-boot Security實戰

認證失敗處理器

  • 自定義無權限訪問處理器,實現AccessDeniedHandler接口

Spring-boot Security實戰

無權限訪問處理器

  • 配置Security訪問控制、自定義無權限訪問處理器、自定義認證失敗處理器

Spring-boot Security實戰

  • 數據庫表結構,按照官方的結構建設,當然也可以自定義

Spring-boot Security實戰

Spring-boot Security實戰

Security很完善很強大,單機應用的話這樣的配置已經基本夠用。

今天就分享到這裡把,寫完實在有點累了,要休息了。


分享到:


相關文章: