Spring Security身份认证之UserDetailsService

本文围绕Spring Security身份认证中的UserDetailsService展开。介绍了标准身份验证方案,阐述了Spring Security架构和核心类,如AuthenticationManager接口等。还说明了UserDetails和UserDetailsService接口的作用,指出UserDetailService负责存取用户信息,认证由AuthenticationManager完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Security身份认证之UserDetailsService

什么是Spring Security中的身份认证?

让我们考虑一个每个人都熟悉的标准身份验证方案。

  1. 提示用户使用用户名和密码登录。
  2. 系统(成功)验证密码对于用户名是否正确。
  3. 获取该用户的上下文信息(他们的角色列表等)。
  4. 为用户建立安全上下文
  5. 用户继续进行,可能执行一些可能受访问控制机制保护的操作,该访问控制机制针对当前安全上下文信息检查操作所需的许可。

一、了解UserDetailsService在身份认证中的作用

现在我们对Spring Security的架构和核心类进行高度的概括,他们分别是一个或者两个核心接口以及其实现类, Spring Security中进行身份验证的是AuthenticationManager接口,ProviderManager是它的一个默认实现,但它并不用来处理身份认证,而是委托给配置好的AuthenticationProvider列表,每个AuthenticationProvider会轮流检查身份认证。检查后或者返回Authentication对象或者抛出异常。

 UserDetailsService实现

大多数的身份认证提供程序都利用了UserDetailsUserDetailsService接口,身份认证最常用的方法是加载相应的UserDetails并检查加载的密码和用户输入的密码,通过查看两者和源码:

 UserDetails

public interface UserDetails extends Serializable {
    Collection<? extends GrantedAuthority> getAuthorities();

    String getPassword();

    String getUsername();

    boolean isAccountNonExpired();

    boolean isAccountNonLocked();

    boolean isCredentialsNonExpired();

    boolean isEnabled();
}

UserDetailsService

public interface UserDetailsService {
    UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException;
}

可以发现:

UserDetails接口->Spring Security的基础接口,包含了用户的账号、密码、状态(是否锁定)、权限等信息。

UserDetailsService接口->提供了给用户获取信息的方法,所以它就定义了一个接口,然后由你去实现它,在Spring Security快加里提供的UserDetailsService接口默认实现了:

  • 内存身份验证(InMemoryDaoImpl):存储于内存空间
  • JdbcDaoImpl:存储于数据库(磁盘上)

总结:简单来说,UserDetailService只单纯地负责存取用户信息,除了给框架内的其他组件提供数据外没有其他功能。而认证过程是由AuthenticationManager来完成的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值