javascript
带有Spring Boot 2.0的Spring Security:UserDetailsService
正如我們在上一篇文章中所看到的,我們的spring應用程序的用戶名和密碼是通過環境變量配置的。 這對于原型目的是可以的,但是在現實生活中,我們必須提供另一種方式來使用戶有資格登錄到該應用程序。 為此,我們使用UserDetailsS??ervice接口。
用戶詳細信息服務帶有loadUserByUsername函數。 loadUserByUsername根據用戶名查找用戶。 搜索結果(如果存在)然后使用通過UserDetailsS??ervice檢索的用戶信息來驗證通過登錄表單提供的憑據。
因此,讓我們從一個非常簡單的自定義用戶詳細信息服務開始。
@Service public class UserDetailsServiceImpl implements UserDetailsService {@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {if(username.equals("test")) {return User.withDefaultPasswordEncoder().username("test").password("test").roles("test").build();} else {return null;}} }如您所見,唯一能夠登錄的用戶是使用用戶名test的用戶。 當涉及到用戶詳細信息時,spring也為我們提供了一個構建器。 作為密碼編碼器,我們指定了默認密碼編碼器,它實際上是一種編碼器,因為我們提供了密碼明文,所以它根本不進行密碼哈希處理。
盡管密碼編碼器將在另一篇教程中介紹,但最好還是提醒您,出于安全原因, 應始終對存儲在數據庫中的密碼進行哈希處理。
現在,您需要添加任何其他信息嗎? 好吧 在您的Spring上下文中,僅具有一個實現UserDetailsS??ervice的bean就足夠了。 Spring安全將選擇您提供的UserDetailsS??ervice實現,并將其用于身份驗證。
例如,您甚至可以使用@Bean配置來提供UserDetailsS??ervice。
@Configuration public class SecurityConfig {@Beanpublic UserDetailsService createUserDetailsService() {return new UserDetailsServiceImpl();}}通過這種方式,無論您的用戶信息存儲在sql數據庫,nosql數據庫還是csv文件中,您唯一要做的就是在loadUserByUsername中加載用戶并通過創建一個UserDetails對象。
翻譯自: https://www.javacodegeeks.com/2018/05/spring-security-with-spring-boot-2-0-userdetailsservice.html
總結
以上是生活随笔為你收集整理的带有Spring Boot 2.0的Spring Security:UserDetailsService的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 实现threadlocal_Thread
- 下一篇: spring和spring_Spring
