真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Springsecurity的認證和授權(quán)

Spring security可以進行認證和授權(quán),認證和授權(quán)需要針對每一個請求,所以這個功能,可以用過濾器來實現(xiàn),spring security正是通過一系列過濾器來實現(xiàn)認證和授權(quán)功能的。

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、遠安ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的遠安網(wǎng)站制作公司

我們來看看其中幾個比較重要的過濾器,類和接口。

1.1   UserDetails:

public interfaceUserDetailsextendsSerializable{
CollectiongetAuthorities();
StringgetPassword();
StringgetUsername();
booleanisAccountNonExpired();
booleanisAccountNonLocked();
booleanisCredentialsNonExpired();
booleanisEnabled();
}

用來記錄用戶的信息,包括用戶名,權(quán)限等信息。

1.2 UserDetailsService:

UserDetailsService接口用于返回用戶相關(guān)數(shù)據(jù)返回的是一個UserDetails實例,它有l(wèi)oadUserByUsername()方法,該方法可以根據(jù)username查詢用戶實體,可以實現(xiàn)該接口覆蓋該方法,實現(xiàn)自定義獲取用戶過程。

public interfaceUserDetailsService {
    UserDetails loadUserByUsername(String var1)throwsUsernameNotFoundException;
}

 

1.3   Authentication:

封裝用戶信息的接口,UsernamePasswordAuthenticationToken是它的實現(xiàn)類,用戶登錄以后,用戶名,密碼等信息被封裝到了UsernamePasswordAuthenticationToken對象中。

它和UserDetails不同之處在于Authentication記錄的是當(dāng)前登錄用戶的信息,而UserDetails則是用戶信息的封裝。

public interfaceAuthenticationextendsPrincipal, Serializable {
    CollectionextendsGrantedAuthority> getAuthorities();

    Object getCredentials();

    Object getDetails();

    Object getPrincipal();

   booleanisAuthenticated();

   voidsetAuthenticated(booleanvar1)throwsIllegalArgumentException;
}

 

getAuthorities方法獲取權(quán)限信息的列表

getCredentials方法獲取用戶認證時輸入的密碼

getDetails方法獲取訪問者的ip地址和sessionid的值

getPrincipal方法獲取用戶的信息,大部分情況下返回的是UserDetails接口的實現(xiàn)類

 

1.4   AuthenticationManager:

是認證相關(guān)的核心接口,用來處理認證請求,如果認證成功則返回一個Authentication接口的實例,它的默認實現(xiàn)類是:ProviderManager。

 

 

SecurityContext:是安全上下文接口,用來存儲認證授權(quán)的相關(guān)信息,這個接口只有兩個方法,Authentication對象的getter、setter。

public interface SecurityContext extends Serializable {

    Authentication getAuthentication();

 

    void setAuthentication(Authentication var1);

}

 

1.5   SecurityContextHolder:

保存系統(tǒng)當(dāng)前的安全上下文,包括當(dāng)前使用系統(tǒng)的用戶的信息。

 

1.6   PasswordEncoder:

該接口有很多實現(xiàn)類,它用來在認證的過程中使用matches方法比對密碼,具體如何比對密碼則取決于PasswordEncoder的實現(xiàn)類。

public interfacePasswordEncoder {
    String encode(CharSequence var1);
   booleanmatches(CharSequence var1, String var2);
}

比如不對密碼進行加密,采用明文字符串進行比對可以:

@Bean
public PasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder.getInstance();
}

但是在實際項目中我們往往會對密碼進行加密,比較常用的PasswordEncoder實現(xiàn)類有:、

BCryptPasswordEncoder, Pbkdf2PasswordEncoder, SCryptPasswordEncoder

如果使用BcryptPasswordEncoder:

則:

@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

 

認證流程:

1.用戶提交用戶名密碼被UsernamePasswordAuthenticationFilter過濾器獲取到,
封裝為Authentication接口的實例,通常情況下是UsernamePasswordAuthenticationToken。

2.過濾器將Authentication提交至認證管理器(AuthenticationManager)進行認證,認證成功后返回一個被填充滿信息的Authentication實例.

3. SecurityContextHolder保存返回的Authentication實例.

 

 

 

授權(quán)流程:

1.攔截請求:已認證的用戶請求將會被過濾器:FilterSecurityInterceptor攔截。

2. FilterSecurityInterceptor獲取訪問權(quán)限,該權(quán)限就是我們配置的訪問規(guī)則如。

http
.authorizeRequests()
.antMatchers("/r/r1").hasAuthority("p1")
.antMatchers("/r/r2").hasAuthority("p2")

3. FilterSecurityInterceptor會調(diào)用訪問決策管理器 AccessDecisionManager進行授權(quán)決策,若決策通過,則允許訪問資源,否則將禁止訪問

AccessDecisionManager:訪問決策管理器,用來控制用戶是否有相應(yīng)的權(quán)限。

public interfaceAccessDecisionManager{
/**
*通過傳遞的參數(shù)來決定用戶是否有訪問對應(yīng)受保護資源的權(quán)限
*/
voiddecide(Authentication authentication,Objectobject,Collection
configAttributes) throwsAccessDeniedException,InsufficientAuthenticationException;
//略..
}

參數(shù)說明:

Authentication:要訪問資源的訪問者

object:要訪問的受保護資源

configAttributes:是受保護資源的訪問策略

decide方法就是用來判斷訪問者是否有訪問某資源的權(quán)限。

它用投票的方式來決定是否有訪問某資源的權(quán)限


文章標(biāo)題:Springsecurity的認證和授權(quán)
文章網(wǎng)址:http://weahome.cn/article/psoicd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部