Spring Security Config : InMemoryUserDetailsManagerConfigurer

InMemoryUserDetailsManagerConfigurer是Spring Security配置中用于内存认证的关键组件,它通过创建InMemoryUserDetailsManager来管理用户详情,适用于开发和测试环境。本文深入解析其工作原理、配置方法及应用场景。

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

概述

介绍

InMemoryUserDetailsManagerConfigurerSpring Security Config提供的一个安全配置器SecurityConfigurer,用来配置一个安全构建器ProviderManagerBuilder(通常可以认为就是AuthenticationManagerBuilder),它为目标安全构建器提供的是一个基于内存存储用户账号详情的用户账号详情管理对象DaoAuthenticationProvider

具体来讲,InMemoryUserDetailsManagerConfigurer实现了接口SecurityConfigurer,它的主要配置动作是:

  1. 创建一个InMemoryUserDetailsManager(UserDetailsManager/UserDetailsService的一个实现类);
  2. 创建一个DaoAuthenticationProvider,将上面所创建的InMemoryUserDetailsManager作为自己的UserDetailsService userDetailsService属性;
  3. 将上面所创建的DaoAuthenticationProvider添加到目标构建器ProviderManagerBuilder上。

另外,因为InMemoryUserDetailsManagerConfigurer继承自UserDetailsManagerConfigurer,所以UserDetailsManagerConfigurer所具备的能力,InMemoryUserDetailsManagerConfigurer都拥有。

注意 : InMemoryUserDetailsManagerConfigurer和所提供的InMemoryUserDetailsManager主要应用于开发调试环境,其设计目的主要是测试和功能演示,一般不在生产环境中使用。

继承关系

UserDetailsManagerConfigurer

使用

 // 通常开发人员的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

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值