我得到了这项工作,但不太了解背后的过程:
<!-- Authentication Manager -->
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider user-service-ref="customUserDetailsService">
<sec:password-encoder ref="encoder"/>
</sec:authentication-provider>
</sec:authentication-manager>
<bean id="encoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder">
在customUserDetailsService
:
@Component("customUserDetailsService")
public class CustomUserDetailsService implements UserDetailsService {
............
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
User user = userService.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User '"+username+"' not found !");
}
return user;
}
}
用户服务基本上只是用他或她的名字验证用户,但没有验证它的密码。但password-encoder
实际上确实验证了密码,那么Spring如何将编码器与User
实体的密码列相关联?验证用户密码的过程在哪里?
如何自定义密码验证过程以拦截解密的密码?
答案 0 :(得分:2)
您的User
课程应该已经实施了UserDetails
,其方法为getPassword()
。因为它是一个Spring接口,所以在需要时会调用这个方法。
答案 1 :(得分:0)
接受的答案对我不起作用,我必须创建org.springframework.security.authentication.AuthenticationProvider
的自定义实现