Spring security 在spring boot security中使用authenticationProvider时如何配置数据源?
如果我使用的是jdbcAuthentication,那么它将是auth.jdbccAuthentication().dataSource(dataSource) 现在我有两个数据库,一个用于应用程序,一个用于安全 我找不到使用authenticationProvider()配置要使用的数据库的方法 我是如何解决这个问题的Spring security 在spring boot security中使用authenticationProvider时如何配置数据源?,spring-security,Spring Security,如果我使用的是jdbcAuthentication,那么它将是auth.jdbccAuthentication().dataSource(dataSource) 现在我有两个数据库,一个用于应用程序,一个用于安全 我找不到使用authenticationProvider()配置要使用的数据库的方法 我是如何解决这个问题的 @Configuration @EnableJpaRepositories(basePackages={"${spring.data.jpa.security.rep
@Configuration
@EnableJpaRepositories(basePackages={"${spring.data.jpa.security.repository.packages}"},
entityManagerFactoryRef = "securityEntityManagerFactory")
public class DemoSecurityDataSourceConfig {
@Bean
@ConfigurationProperties(prefix="security.datasource")
public DataSource securityDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="spring.data.jpa.security")
public LocalContainerEntityManagerFactoryBean securityEntityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("securityDataSource") DataSource securityDataSource) {
return builder
.dataSource(securityDataSource)
.build();
}
}
您可以通过编程方式配置
数据源
,然后使用JdbcUserDetailsManager
配置Spring Security应该使用哪个数据源
在下面的示例中,有2个数据源,一个使用H2,一个使用MySQL
Spring Security使用H2数据源
,因为我们添加了“Security”@限定符
@Bean(“安全性”)
公共数据源安全性数据源(){
返回新的EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript(“classpath:org/springframework/security/core/userdetails/jdbc/users.ddl”)
.build();
}
@豆子
@初级的
公共数据源primaryDataSource(){
DataSourceBuilder DataSourceBuilder=DataSourceBuilder.create();
dataSourceBuilder.url(“jdbc:mysql://localhost:3306/db_example");
dataSourceBuilder.username(“springuser”);
dataSourceBuilder.password(“密码”);
返回dataSourceBuilder.build();
}
@豆子
UserDetailsManager用户(@Qualifier(“security”)数据源数据源){
UserDetails user=user.builder()
.用户名(“用户”)
.password(“{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW”)
.角色(“用户”)
.build();
JdbcUserDetailsManager用户=新的JdbcUserDetailsManager(数据源);
users.createUser(用户);
返回用户;
}
我可以通过创建两个数据源各自的cofig文件并添加entityManagerFactoryRef和basePackages来分离这两个数据源,这样应用程序就可以知道在访问某个实体时要获取信息的数据库。
@Configuration
@EnableJpaRepositories(basePackages={"${spring.data.jpa.security.repository.packages}"},
entityManagerFactoryRef = "securityEntityManagerFactory")
public class DemoSecurityDataSourceConfig {
@Bean
@ConfigurationProperties(prefix="security.datasource")
public DataSource securityDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="spring.data.jpa.security")
public LocalContainerEntityManagerFactoryBean securityEntityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("securityDataSource") DataSource securityDataSource) {
return builder
.dataSource(securityDataSource)
.build();
}
}
@Configuration
@EnableJpaRepositories(basePackages={"${spring.data.jpa.app.repository.packages}"},
entityManagerFactoryRef = "appEntityManagerFactory")
public class DemoAppDataSourceConfig {
@Primary
@Bean
@ConfigurationProperties(prefix="app.datasource")
public DataSource appDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean
@ConfigurationProperties(prefix="spring.data.jpa.app")
public LocalContainerEntityManagerFactoryBean appEntityManagerFactory(EntityManagerFactoryBuilder builder, DataSource appDataSource) {
return builder
.dataSource(appDataSource)
.build();
}
}