Spring Boot 1.2.5.RELEASE& Spring Security 4.0.2.RELEASE - 如何在安全上下文初始化之前加载配置文件?

时间:2015-09-07 15:36:14

标签: spring spring-security spring-boot spring-mybatis

我遇到了Spring问题:我正在从Spring Security ver迁移。 3.2.7.RELEASE4.0.2.RELEASE。在旧版本中一切正常,但在加载DataSource时出现了问题。

让我来描述架构:

使用SAML和LDAP机制保护应用程序(SAML配置与此处给出的配置非常相似:https://github.com/vdenotaris/spring-boot-security-saml-sample/blob/master/src/main/java/com/vdenotaris/spring/boot/security/saml/web/config/WebSecurityConfig.java)。

他们都需要连接到数据库才能获得一些必需的数据。我们使用MyBatis和Spring Mybatis来获取所需的数据。那是问题开始的地方。

我的DAO配置类如下所示:

@Configuration
@EnableConfigurationProperties
@MapperScan(basePackages = { "pl.myapp" })
public class DaoConfiguration {

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource());
    }

    @Bean
    @Primary
    public SqlSessionFactoryBean sqlSessionFactoryBean() {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        // some stuff happens here
        return sqlSessionFactoryBean;
    }

    @Bean
    @Primary
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    @ConfigurationProperties(prefix = "liquibase.datasource")
    @ConditionalOnProperty(name="liquibase.enabled")
    public DataSource liquibaseDataSource() {
        DataSource liquiDataSource = DataSourceBuilder.create().build();
        return liquiDataSource;
    }
}

在以前的版本中,它就像一个魅力,但现在加载映射器时出现问题,导致Bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'someMapper' defined in file [<filename>]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

一遍又一遍(这不是我的问题,这是一个已知的Spring / MyBatis错误)。

我做了一些调试并发现了一些有趣的东西:看起来DaoConfiguration在这里看起来不像配置!我的意思是:如果我添加

@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
    return sqlSessionFactoryBean().getObject();
}

到这个配置,@Bean注释方法的“正常”调用应该导致调用适当的拦截器,这里它缺乏这个功能。

我的预测是:这个配置类尚未正确包装,Spring Security已经需要它生成的bean。

在Spring Security初始化之前,是否有任何解决方案可以正确加载此配置?或者我错了,遗漏了一些东西(可能不那么明显)?

0 个答案:

没有答案