©陈华(clinker@163.com),保留一切版权,未经本人同意,禁止任何形式的转载。
多个内存用户
源代码见:spring-security-samples-103
现象
支持多个用户,本文是zhangsan和lisi。
核心代码
SpringSecurityConfig
package security103.config;
import java.util.Collections;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.PasswordEncoder;
/**
* Spring security配置。
*/
@Configuration
class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private PasswordEncoder passwordEncoder;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// 创建多个内存用户
auth.inMemoryAuthentication()
.withUser("zhangsan")// 用户张三
.password(passwordEncoder.encode("87654321"))
.authorities(Collections.emptyList()) // 本例不需要角色
.and()
.withUser("lisi")// 用户李四
.password(passwordEncoder.encode("222222"))
.authorities(Collections.emptyList());// 本例不需要角色
}
}
auth.inMemoryAuthentication()最终是通过InMemoryUserDetailsManager创建了用户。
配置文件application.yml不需要设置user和password。
PasswordConfig
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
/**
* 配置PasswordEncoder。
*/
@Configuration
lass PasswordConfig {
/**
* 使用Spring security默认的PasswordEncoder。
*
* @return PasswordEncoder
*/
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}
显式地创建密码编码器。