1. 程式人生 > 實用技巧 >Spring Security簡介

Spring Security簡介

座標

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
<version>5.1.13.RELEASE</version>
</dependency> <dependency> <groupId>org.springframework.security</groupId> <
artifactId>spring-security-config</artifactId>
<version>5.1.13.RELEASE</version>
</dependency>

認證和授權概念

問題1:在生產環境下我們如果不登入後臺系統可以完成後臺的所有功能操作嗎?

答案顯然是否定的,要操作這些功能必須首先登入到系統才可以。

問題2:是不是所有使用者,只要登入成功就都可以操作所有功能呢?

答案是否定的,並不是所有的使用者都可以操作這些功能。不同的使用者可能擁有不同的許可權,這就需要進行授權了。

認證:系統提供的用於識別使用者身份的功能,通常提供使用者名稱和密碼進行登入其實就是在進行認證,認證的目的是讓系統知道你是誰。

許可權模組資料模型

RABC 模型

基於角色的許可權訪問控制(Role-Based Access Control),在RBAC中許可權與角色相關聯,使用者通過成為適當角色的成員而得到這些角色的許可權。這就極大地簡化了許可權的管理。在一個組織中,角色是為了完成各種工作而創造,使用者則依據它的責任和資格來被指派相應的角色,使用者可以很容易地從一個角色被指派到另一個角色。角色可依新的需求而賦予新的許可權,而許可權也可根據需要而從某角色中回收。

RBAC支援公認的安全原則:最小特權原則、責任分離原則和資料抽象原則。

  • 最小特權原則,在RBAC模型中可以通過限制分配給角色許可權的多少和大小來實現,分配給與某使用者對應的角色的許可權只要不超過該使用者完成其任務的需要就可以。

  • 責任分離原則,是在RBAC模型中可以通過在完成敏感任務過程中分配兩個責任上互相約束的兩個角色來實現,例如在清查賬目時,只需要設定財務管理員和會計兩個角色參加就可以。

  • 資料抽象原則,是藉助於抽象許可權這樣的概念實現的,如在賬目管理活動中,可以使用信用、借方等抽象許可權,而不是使用作業系統提供的讀、寫、執行等具體的許可權。RBAC並不強迫實現這些原則。

Spring-Security認證流程

使用者一次完整的登入驗證和授權,是一個請求經過 層層攔截器從而實現許可權控制,整個web端配置為DelegatingFilterProxy(springSecurity的委託過濾其代理類 ),它並不實現真正的過濾,而是所有過濾器鏈的代理類,真正執行攔截處理的是由spring 容器管理的各個filter bean組成的filterChain.

  • 攔截

  • 認證與授權

認證(Authentication):確定一個使用者的身份的過程。授權(Authorization):判斷一個使用者是否有訪問某個安全物件的許可權。下面討論一下spring security中最基本的認證與授權。

首先明確一下在認證與授權中關鍵的是UsernamePasswordAuthenticationFilter:該過濾器用於攔截我們表單提交的請求(預設為/login),進行使用者的認證過程。

授權登入的請求,UsernamePasswordAuthenticationFilter將攔截請求進行認證。

AuthenticationProvider中維護了UserDetailsService,我們使用記憶體中的使用者,預設的實現是InMemoryUserDetailsManager。UserDetailsService用來查詢使用者的詳細資訊,該詳細資訊就是UserDetails。UserDetails的預設實現是User。查詢出來UserDetails後再對使用者輸入的密碼進行校驗。校驗成功則將UserDetails中的資訊填充進Authentication中返回。校驗失敗則提醒使用者密碼錯誤。

配置

xml https://github.com/yourZhang/study_java/tree/master/Security01

全註解 https://github.com/yourZhang/study_java/tree/master/Security02-anno