Java UserDetailsService在SpringSecurity的AuthenticationManager中扮演什么角色?
我正在尝试创建一个登录页面,如果登录成功,该页面将返回JWT,但我无法理解某些功能是如何工作的。我目前正在学习一个关于JWT身份验证的不错的教程,作者在其中创建了一个“/login”端点,它看起来像:Java UserDetailsService在SpringSecurity的AuthenticationManager中扮演什么角色?,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,我正在尝试创建一个登录页面,如果登录成功,该页面将返回JWT,但我无法理解某些功能是如何工作的。我目前正在学习一个关于JWT身份验证的不错的教程,作者在其中创建了一个“/login”端点,它看起来像: @PostMapping("/login") public String login(@RequestBody LoginUserDto loginUser) { try{ authenticationManager.authenticate(new UsernamePassw
@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
是在websecurityConfigureAdapter
类中配置的:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService)
.passwordEncoder(NoOpPasswordEncoder.getInstance());
}
但是,如果他使用
AuthenticationManager
,那么此UserDetailsService
的目的是什么?因为我在几乎每一个教程中都看到了我需要实现这个接口的内容…使用userdetails服务
从后端结构(如数据库)加载用户。当用户尝试使用用户名和密码登录时,将调用loadUserByUsername
方法。方法loadUserByUsername
返回一个UserDetails
对象,您可以从中获取用户的身份验证和授权信息(来自域用户的更具体信息,如:员工编号、全名)。因此,您可能需要它在应用程序流程中进行更详细的使用,比如了解用户全名是否符合逻辑。调用authenticationManager.authenticate可以根据提供程序(LDAP、数据库、OAUTH等)检查凭据
创建自定义UserDetailsService
对象是一种简单的机制,它允许Spring Security根据自定义域模型做出安全决策Spring Security需要UserDetailsService
才能使用内置的记忆我支持,并且UserDetailsService
对象在身份验证不基于用户名和密码时不起作用