【问题标题】:Spring security and UserDetailsServiceSpring 安全性和 UserDetailsS​​ervice
【发布时间】:2014-10-10 10:38:51
【问题描述】:

我是 Spring Security 的新手,我正在尝试实现自定义 UserDetailsService 进行身份验证。困扰我的是,这个接口只包含一个方法loadUserByUsername(String username),它只接受用户名作为参数并返回一个UserDetails。

我想知道为什么这个方法不接受任何密码作为参数。

Spring 如何仅根据用户名对用户进行身份验证?

我是 Spring Security 的新手,欢迎对 Spring Security 中的 API 和身份验证过程进行任何说明。

【问题讨论】:

    标签: java spring spring-security


    【解决方案1】:

    验证用户身份不是UserDetailsService 的工作。那是AuthenticationProvider的责任。

    例如DaoAuthenticationProvider 只是使用UserDetailsService 通过用户名加载用户,然后针对该用户验证UsernamePasswordAuthenticationToken 以查看密码是否匹配。

    查看DaoAuthenticationProvider 的源代码,了解这究竟是如何在幕后完成的。

    【讨论】:

    • 如果我将用户存储在数据库中,是否必须提供 AuthenticationProvider?
    • 是的,如果您想使用自定义 UserDetailsS​​ervice。查看此答案以了解有关如何使用自定义 UserDetailsS​​ervice 设置身份验证管理器的详细信息:stackoverflow.com/questions/26285609/…
    • UserDetailsSercvice 用于授权用户并根据需要从 Ldap/DB 加载用户信息。如果您想针对 DB 对用户进行身份验证,那么您可以编写自己的自定义 AuthenticationProvider 并覆盖 authenticate() 方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2011-06-22
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2017-01-31
    • 2019-09-11
    相关资源
    最近更新 更多