一段时间以来,我一直在研究JWT的Spring安全性,我注意到在阅读的每个教程中,用户名和密码都被获取,并包装在UsernamePasswordAuthenticationToken中,然后传递给AuthenticationManager.authenticate()像这样:>
@RequestMapping(value = "${jwt.route.authentication.path}", method = RequestMethod.POST)
public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtAuthenticationRequest authenticationRequest) throws AuthenticationException {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(authenticationRequest.getUsername(), authenticationRequest.getPassword()));
// Reload password post-security so we can generate the token
final UserDetails userDetails = userDetailsService.loadUserByUsername(authenticationRequest.getUsername());
final String token = jwtTokenUtil.generateToken(userDetails);
// Return the token
return ResponseEntity.ok(new JwtAuthenticationResponse(token));
}
我的问题是authenticate方法做什么,为什么要使用它?
答案 0 :(得分:2)
AuthenticationManager只是一个接口,因此实现可以是我们选择的任何东西。 (...)Spring Security中的默认实现称为ProviderManager,它不处理身份验证请求本身,而是委派给已配置的AuthenticationProvider列表,依次查询每个AuthenticationProvider以确定其是否可以执行身份验证。每个提供程序将抛出异常或返回完全填充的Authentication对象。