如何执行我自己的身份验证(检查用户键入的用户名和密码)

时间:2014-10-28 11:28:59

标签: spring spring-mvc spring-security

我实现了UserDetailsService接口并覆盖了loadUserByUsername方法。

我认为,在loadUserByUsername内,我可以获得用户名和密码,以检查它们是否与数据库上的用户名和密码匹配。但我无法理解如何获取用户输入的密码,只要它是可能的。

可能我正在实施错误的界面。

UserDetailsService是否足以做我想做的事情,或者我必须实施或扩展其他内容?

2 个答案:

答案 0 :(得分:0)

UserDetailsService只是从数据库中检索用户详细信息 - 它不是要进行密码比较。

如果您想进行自己的密码比较 - 您可以实施自己的PasswordEncoder(更具体地说是isPasswordValid(pass1,pass2,salt)方法,但有几种方法可以扩展 - 例如Md5PasswordEncoder

要连接自定义PassordEncoder,您需要提供以下内容:

<authentication-manager id="authenticationManager">
    <authentication-provider user-service-ref="myUserDetailsService">
        <password-encoder ref="myPasswordEncoder"/>
    </authentication-provider>
</authentication-manager>

答案 1 :(得分:0)

UserDetailsS​​ervice.loadUserByUsername()只是从数据库中加载(检索)用户详细信息 - 它不是要进行密码比较。

比较发生在UsernamePasswordAuthenticationFilter.attemptAuthentication()中。然后它调用getAuthenticationManager()。authenticate(),进行比较。

请参阅:What is the default AuthenticationManager in Spring-Security? How does it authenticate?

至于替换 UsernamePasswordAuthenticationFilter,问问自己你的用例是什么?你想要做什么,默认实现不?也许你不必替换它......无论如何,你可以在Spring's docs

中看到如何做到这一点

HTH