如何使用JDBC-Spring Boot/Spring安全认证与Flyway
How to use JDBC-Authentication of Spring Boot/Spring Security with Flyway
我正在尝试设置我的 spring 启动应用程序,该应用程序使用 spring 安全文档附录中提供的 jdbcAuthentication 和默认数据库方案来验证其用户。但是我在数据库初始化期间遇到了这个异常:
org.flywaydb.core.api.FlywayException: Found non-empty schema "PUBLIC" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
身份验证管理器的配置如下所示:
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic()
.realmName("shipment2rss")
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.jdbcAuthentication()
.dataSource(dataSource)
.withDefaultSchema();
}
}
我读到问题似乎是在执行 Flyway 相关代码之前调用了方法 configureGlobal(AuthenticationManagerBuilder )
(请参阅 ),但没有找到如何进行的分步指南解决这个特定问题。
任何人都可以给我这样的指南或指向一个网站吗?
编辑 我在 github 上传了一个项目来显示问题:https://github.com/smilingj/springboot-authentication-flyway-sample/tree/e48ce63568776d99e49a9548d8362168cc3a3367
在配置 jdbcAuthentication
和调用 withDefaultSchema
时直接创建模式,并在 Flyway 对创建模式进行任何更改之前执行此操作。
Flyway 现在检测到它已经存在,而不是允许它创建模式,并且它对此进行了抱怨。
您有 2 种可能的解决方案
- 扩展
FlywayMigrationStrategy
并将 baselineOnMigrate
属性 设置为 true
。
- 更好的办法是让 Flyway 完成所有的数据库迁移。要启用该功能,请删除对
withDefaultSchema
的调用,只需添加 sql 即可为 Flyway 创建 Spring 安全表。 SQL 文件是 Spring 安全分发的一部分。
我正在尝试设置我的 spring 启动应用程序,该应用程序使用 spring 安全文档附录中提供的 jdbcAuthentication 和默认数据库方案来验证其用户。但是我在数据库初始化期间遇到了这个异常:
org.flywaydb.core.api.FlywayException: Found non-empty schema "PUBLIC" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
身份验证管理器的配置如下所示:
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic()
.realmName("shipment2rss")
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.jdbcAuthentication()
.dataSource(dataSource)
.withDefaultSchema();
}
}
我读到问题似乎是在执行 Flyway 相关代码之前调用了方法 configureGlobal(AuthenticationManagerBuilder )
(请参阅
任何人都可以给我这样的指南或指向一个网站吗?
编辑 我在 github 上传了一个项目来显示问题:https://github.com/smilingj/springboot-authentication-flyway-sample/tree/e48ce63568776d99e49a9548d8362168cc3a3367
在配置 jdbcAuthentication
和调用 withDefaultSchema
时直接创建模式,并在 Flyway 对创建模式进行任何更改之前执行此操作。
Flyway 现在检测到它已经存在,而不是允许它创建模式,并且它对此进行了抱怨。
您有 2 种可能的解决方案
- 扩展
FlywayMigrationStrategy
并将baselineOnMigrate
属性 设置为true
。 - 更好的办法是让 Flyway 完成所有的数据库迁移。要启用该功能,请删除对
withDefaultSchema
的调用,只需添加 sql 即可为 Flyway 创建 Spring 安全表。 SQL 文件是 Spring 安全分发的一部分。