Spring Security(3):數據庫管理

核心處理流程java

86f38c9e111e311cdd6dc9f4f5dc8f86.png


1:當一個用戶登陸時,會先執行身份認證。
spring

2:若是身份認證未經過,則會要求用戶從新認證。數據庫

3:若是身份認證經過,則會調用角色管理器判斷它是否能夠訪問。安全

這裏若是咱們須要使用數據庫中數據進行身份認證,則須要自定義用戶登陸功能。Spring Security爲咱們提供的UsrtDetailsService接口。ide

package org.springframework.security.core.userdetails;

public interface UserDetailsService {
    UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException;
}


UserDetails.javaspa

package org.springframework.security.core.userdetails;

import java.io.Serializable;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;

public interface UserDetails extends Serializable {
    Collection<? extends GrantedAuthority> getAuthorities();    // 權限集合

    String getPassword();           // 密碼

    String getUsername();            // 用戶名

    boolean isAccountNonExpired();    // 帳號是否沒有過時
    
    boolean isAccountNonLocked();    // 帳戶是否沒有被鎖定

    boolean isCredentialsNonExpired();     // 證書是否沒有過時

    boolean isEnabled();            // 帳戶是否有效
}

UserDetails中的任何一個方法返回false,用戶的憑證都會視爲無效。對象

Authenticationblog

package org.springframework.security.core;

import java.io.Serializable;
import java.security.Principal;
import java.util.Collection;

public interface Authentication extends Principal, Serializable {
    Collection<? extends GrantedAuthority> getAuthorities();    // 權限集合

    Object getCredentials();        // 獲取憑證
    
    Object getDetails();            // 獲取認證一些額外信息

    Object getPrincipal();            // 過去認證的實體

    boolean isAuthenticated();        // 是否經過認證

    void setAuthenticated(boolean var1) throws IllegalArgumentException;
}

實際上Spring Security進行安全訪問控制用戶信息的對象是Authentication。接口

Authentication有已認證和未認證兩種狀態,在做爲參數傳入認證管理器的時候,它是一個未認證的對象,它從客戶端獲取用戶名/密碼,並由系統自動構成一個Authentication對象;而UserDetails表明的是一個用戶安全信息的源,這個源能夠是從數據庫獲取,Spring Security要作的就是將這個爲認證的Authentication對象和UserDetails進行匹配,成功後將UserDetails中的用戶權限信息拷貝到Authentication只,組成一個完整的Authentication對象,與其它組件進行共享。ip

相關文章
相關標籤/搜索