[英]Spring Boot: Configuring AuthenticationManager with custom UserDetailsService
[英]What is the role of UserDetailsService in AuthenticationManager from Spring Security?
我正在嘗試創建一個登錄頁面,如果登錄成功,則返回 JWT 但我不明白某些功能是如何工作的。 我目前正在關注一個很好的 JWT 身份驗證教程,其中作者創建了一個“/login”端點,如下所示:
@PostMapping("/login")
public String login(@RequestBody LoginUserDto loginUser) {
try{
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(//email,//password));
}catch(BadCredentialsException exception) {....}
final UserDetails userDetails = userDetailsService.loadUserByUsername(//email);
return createToken(userDetails.getUsername());
}
如果authenticate()
方法沒有拋出任何BadCredentialsException
,他為什么還要調用userDetailsService.loadUserByUsername()
?
無論如何,我已經看到這個userDetailsService
是在WebSecurityConfigurerAdapter
class 中配置的:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService)
.passwordEncoder(NoOpPasswordEncoder.getInstance());
}
但同樣,如果他使用AuthenticationManager
,這個UserDetailsService
的目的是什么? 因為我幾乎在每個教程中都看到了我需要實現這個接口......
UserDetailsService
用於從后端結構(如數據庫)加載用戶。 當用戶嘗試使用用戶名和密碼登錄時,將調用loadUserByUsername
方法。 loadUserByUsername
方法返回一個UserDetails
object ,您可以在其中獲取用戶的身份驗證和授權信息(來自域用戶的更具體信息,例如:員工編號、全名)。 因此,您可能需要它在應用程序流程中進行更詳細的使用,例如了解用戶全名是否符合邏輯。 調用authenticationManager.authenticate
你可以檢查提供者的憑據(LDAP、數據庫、OAUTH 等)。
創建自定義UserDetailsService
ervice object 是一種簡單的機制,它允許Spring Security根據您的自定義域 model 做出安全決策。 Spring Security需要UserDetailsService
ervice 才能使用內置的記住我支持和UserDetailsService
ervice object 在身份驗證不基於用戶名和密碼時不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.