概述
介绍
InMemoryUserDetailsManagerConfigurer是Spring Security Config提供的一个安全配置器SecurityConfigurer,用来配置一个安全构建器ProviderManagerBuilder(通常可以认为就是AuthenticationManagerBuilder),它为目标安全构建器提供的是一个基于内存存储用户账号详情的用户账号详情管理对象DaoAuthenticationProvider。
具体来讲,InMemoryUserDetailsManagerConfigurer实现了接口SecurityConfigurer,它的主要配置动作是:
- 创建一个
InMemoryUserDetailsManager(UserDetailsManager/UserDetailsService的一个实现类); - 创建一个
DaoAuthenticationProvider,将上面所创建的InMemoryUserDetailsManager作为自己的UserDetailsService userDetailsService属性; - 将上面所创建的
DaoAuthenticationProvider添加到目标构建器ProviderManagerBuilder上。
另外,因为InMemoryUserDetailsManagerConfigurer继承自UserDetailsManagerConfigurer,所以UserDetailsManagerConfigurer所具备的能力,InMemoryUserDetailsManagerConfigurer都拥有。
注意 :
InMemoryUserDetailsManagerConfigurer和所提供的InMemoryUserDetailsManager主要应用于开发调试环境,其设计目的主要是测试和功能演示,一般不在生产环境中使用。
继承关系

使用
// 通常开发人员的WebSecurityConfigurerAdapter实现类在方法
// public void configure(AuthenticationManagerBuilder builder) throws Exception 中有如下调用 :
// 这里 builder 是 AuthenticationManagerBuilder
// 1. 应用了 InMemoryUserDetailsManagerConfigurer
// 2. 创建用户账号 admin/123, 密码采用明文保存,角色 ADMIN
// 3. 创建用户账号 root/123, 密码采用明文保存,角色为 ROOT
builder.inMemoryAuthentication().withUser("admin").password("{noop}123").roles("ADMIN").and()
.withUser("root").password("{noop}123").roles("ROOT");
源代码
源代码版本 Spring Security Config 5.1.4.RELEASE
package org.springframework.security.config.annotation.authentication.configurers.provisioning;
import java.util.ArrayList;
import org.springframework.security.config.annotation.authentication.ProviderManagerBuilder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
/**
* Configures an
* org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
* to have in memory authentication. It also allows easily adding users to the in memory
* authentication.
*
* @param <B> the type of the ProviderManagerBuilder that is being configured
*
* @author Rob Winch
* @since 3.2
*/
public class InMemoryUserDetailsManagerConfigurer<B extends ProviderManagerBuilder<B>>
extends UserDetailsManagerConfigurer<B, InMemoryUserDetailsManagerConfigurer<B>> {
/**
* Creates a new instance
*/
public InMemoryUserDetailsManagerConfigurer() {
super(new InMemoryUserDetailsManager(new ArrayList<>()));
}
}
从源代码可见,InMemoryUserDetailsManagerConfigurer只提供了一个缺省构造函数,确定目标UserDetailsManager是一个InMemoryUserDetailsManager,并且不包含任何用户详情。真正需要被管理的用户详情会在配置过程中设置。除此之外,InMemoryUserDetailsManagerConfigurer的主要能力,体现在其基类UserDetailsManagerConfigurer。
InMemoryUserDetailsManagerConfigurer是Spring Security配置中用于内存认证的关键组件,它通过创建InMemoryUserDetailsManager来管理用户详情,适用于开发和测试环境。本文深入解析其工作原理、配置方法及应用场景。
396

被折叠的 条评论
为什么被折叠?



