spring security如何验证密码(凭证)?

时间:2014-01-15 16:53:56

标签: spring spring-security

我得到了这项工作,但不太了解背后的过程:

<!-- 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实体的密码列相关联?验证用户密码的过程在哪里?

问题2

如何自定义密码验证过程以拦截解密的密码?

2 个答案:

答案 0 :(得分:2)

您的User课程应该已经实施了UserDetails,其方法为getPassword()。因为它是一个Spring接口,所以在需要时会调用这个方法。

答案 1 :(得分:0)

接受的答案对我不起作用,我必须创建org.springframework.security.authentication.AuthenticationProvider的自定义实现