我正在使用像这样的自定义身份验证
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException{
LoggedInUser user = new LoggedInUser();
...
...
return new UsernamePasswordAuthenticationToken(user, authentication.getCredentials());
}
这里我正在为authentication
对象
现在我正在使用password-encoder
,因此我的自定义身份验证
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserService userService;
static final PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
}
在loadUserByUsername
内,如何设置Authentication
对象?
答案 0 :(得分:0)
UserDetailsService
实现应负责根据提供的ID检索用户详细信息,而不是操纵Authentication
。要处理特定的Authentication
对象,请实施自定义AuthenticationProvider
或扩展将委派给您的DaoAuthenticationProvider
以检索用户的现有对象(例如UserDetailsService
)。然后可以将此类用户分配给身份验证对象,并从AuthenticationProvider.authenticate(...)
方法返回。
查看使用single responsibility和separation of concerns原则实现的Spring Security DaoAuthenticationProvider
。