Spring Security 找不到数据源

Posted

技术标签:

【中文标题】Spring Security 找不到数据源【英文标题】:Spring Security Can Not Find Datasource 【发布时间】:2016-06-04 10:59:07 【问题描述】:

我正在使用 Spring Boot MVC,并且 Spring 的 ServletRegistrationBean 在我的数据源配置之前被调用,它加载到 StandardContext 中。

WebSecurityConfig 总是首先被调用,因此从来没有为 Autowired prodDatasource 定义 bean。

我尝试了从@Order@ConditionalOnMissingBean 的所有方法。我一直找不到合适的解释。但我需要在运行 WebSecurity 之前为数据源创建一个 Bean

应用程序(使用自动配置)

@EnableAutoConfiguration
@SpringBootApplication
@EnableCaching
public class Application 


    public static void main(String[] args) 
        SpringApplication.run(Application.class, args);
    

    @Bean
    public CacheManager cacheManager() 
        return new ConcurrentMapCacheManager("appInfo");
    


PrimaryDataSource

@Configuration
@PropertySource( "classpath:application.properties" )
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "App.Models",
        entityManagerFactoryRef = "prodEntityManager",
        transactionManagerRef = "transactionManager"
)
public class PrimaryDatasourceConfig 

    @Autowired
    private Environment env;

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.prod")
    public DataSource prodDataSource() 
        EmbeddedDatabaseFactory factory = new EmbeddedDatabaseFactory();
        factory.setDatabaseName("spring-social-quickstart");
        factory.setDatabaseType(EmbeddedDatabaseType.H2);
        return factory.getDatabase();
    

WebSecurityConfig

@Configuration
@EnableWebSecurity
@Import(PrimaryDatasourceConfig.class)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter 

    @Autowired
    private DataSource prodDataSource;

    SuperiorUserService jdbcDao;

.......

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
        auth
                .jdbcAuthentication()
                .dataSource(prodDataSource);
        auth.authenticationProvider(authProvider());
    


【问题讨论】:

【参考方案1】:

好吧,我想出了一个似乎有帮助的解决方案。

而不是在我的 Spring Security 中使用 @Autowire。我用@Resource 替换了它们,它似乎在等待首先创建我的bean。

【讨论】:

以上是关于Spring Security 找不到数据源的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular + Spring Security 应用程序中找不到错误

找不到 Spring Security 标记库

Spring Security 找不到 NamespaceHandler

添加“spring-security-taglibs”后jsp中仍然报错:找不到spring security标签的标签库描述符

找不到 org.springframework.security:spring-security-b om:jar:5.0.6.RELEASE

在简单的 Maven 项目中找不到依赖 spring-boot-starter-security