日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

[SpringSecurity]基本原理_两个重要的接口_UserDetailsService接口和PasswordEncoder接口

發布時間:2023/12/4 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [SpringSecurity]基本原理_两个重要的接口_UserDetailsService接口和PasswordEncoder接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

UserDetailsService接口

當什么也沒有配置的時候,賬號和密碼是由 Spring Security 定義生成的。而在實際項目中
賬號和密碼都是從數據庫中查詢出來的。 所以我們要通過自定義邏輯控制認證邏輯。
如果需要自定義邏輯時,只需要實現 UserDetailsService 接口即可。接口定義如下:

? 返回值 UserDetails

這個類是系統默認的用戶"主體"

以下是 UserDetails 實現類

// 表示獲取登錄用戶所有權限 Collection<? extends GrantedAuthority> getAuthorities(); // 表示獲取密碼 String getPassword(); // 表示獲取用戶名 String getUsername(); // 表示判斷賬戶是否過期 boolean isAccountNonExpired(); // 表示判斷賬戶是否被鎖定 boolean isAccountNonLocked(); // 表示憑證{密碼}是否過期 boolean isCredentialsNonExpired(); // 表示當前用戶是否可用 boolean isEnabled();

以后我們只需要使用 User 這個實體類即可!

? 方法參數 username

表示用戶名。此值是客戶端表單傳遞過來的數據。默認情況下必須叫 username,否則無
法接收。

總結

UserDetailsService接口:查詢數據庫用戶名和密碼過程

  • 創建類繼承UsernamePasswordAuthenticationFilter,重寫三個方法
  • 創建類實現UserDetailService,編寫查詢數據過程,返回User對象,這個User對象是安全框架提供對象

PasswordEncoder接口

數據加密接口,用于返回User對象里面密碼加密

// 表示把參數按照特定的解析規則進行解析 String encode(CharSequence rawPassword); // 表示驗證從存儲中獲取的編碼密碼與編碼后提交的原始密碼是否匹配。如果密碼匹 配,則返回 true;如果不匹配,則返回 false。第一個參數表示需要被解析的密碼。第二個 參數表示存儲的密碼。 boolean matches(CharSequence rawPassword, String encodedPassword); // 表示如果解析的密碼能夠再次進行解析且達到更安全的結果則返回 true,否則返回 false。默認返回 false。 default boolean upgradeEncoding(String encodedPassword) { return false; }

接口實現類:

BCryptPasswordEncoder 是 Spring Security 官方推薦的密碼解析器,平時多使用這個解析
器。

BCryptPasswordEncoder 是對 bcrypt 強散列方法的具體實現。是基于 Hash 算法實現的單
向加密??梢酝ㄟ^ strength 控制加密強度,默認 10.

? 查用方法演示

@Test public void test01(){ // 創建密碼解析器 BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); // 對密碼進行加密 String atguigu = bCryptPasswordEncoder.encode("atguigu"); // 打印加密之后的數據 System.out.println("加密之后數據:\t"+atguigu); //判斷原字符加密后和加密之前是否匹配 boolean result = bCryptPasswordEncoder.matches("atguigu", atguigu); // 打印比較結果 System.out.println("比較結果:\t"+result); }

總結

以上是生活随笔為你收集整理的[SpringSecurity]基本原理_两个重要的接口_UserDetailsService接口和PasswordEncoder接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。