Spring 安全 - 未创建默认表

Spring Security - Default Tables not created

我正在尝试在 Spring 引导应用程序中集成 Spring 社交和 Spring 安全性。但似乎 Spring 安全性在创建默认表时遇到问题,例如UserConnection、UserProfile 等,因为在成功建立与 oauth2 提供程序的连接后出现这些 SQL 错误:

PreparedStatementCallback; bad SQL grammar [select userId from UserConnection where providerId = ? and providerUserId = ?]; nested exception is org.h2.jdbc.JdbcSQLException: Tabelle "USERCONNECTION" nicht gefunden Table "USERCONNECTION" not found; SQL statement: select userId from UserConnection where providerId = ? and providerUserId = ? [42102-185]

这是 spring 提供的 JdbcUsersConnectionRepository 中的静态 SQL 调用。我试图切换到避免 SQL 问题的 InMemory 实现,但随后发生了下一个问题:

PreparedStatementCallback; bad SQL grammar [INSERT into userProfile(userId, email, firstName, lastName, name, username) values(?,?,?,?,?,?)]; nested exception is org.h2.jdbc.JdbcSQLException: Tabelle "USERPROFILE" nicht gefunden Table "USERPROFILE" not found; SQL statement: INSERT into userProfile(userId, email, firstName, lastName, name, username) values(?,?,?,?,?,?) [42102-185]

USERPROFILE Table 也丢失了。

在我 post 大量的配置片段之前,您是否已经知道一些我可能已经忘记的东西告诉 spring 为我创建这些表? :)

目前我正在使用 Spring 引导标准 H2 内存数据库,它与 JpaRepositories 配合得很好。

谢谢! :)

自己找到了解决方案 :)

我最终发现第一个事情不是由某些奇特的自动 Spring 机制处理的,而是在 src/main/resources 目录中使用普通的 'schema.sql' 处理的。

create table UserConnection (
  userId varchar(255) not null,
  providerId varchar(255) not null,
  providerUserId varchar(255),
  rank int not null,
  displayName varchar(255),
  profileUrl varchar(512),
  imageUrl varchar(512),
  accessToken varchar(1024) not null,
  secret varchar(255),
  refreshToken varchar(255),
  expireTime bigint,
  primary key (userId, providerId, providerUserId));
create unique index UserConnectionRank on UserConnection(userId, providerId, rank);

create table UserProfile (
  userId varchar(255) not null,
  email varchar(255),
  firstName varchar(255),
  lastName varchar(255),
  name  varchar(255),
  username varchar(255),
  primary key (userId));
create unique index UserProfilePK on UserProfile(userId);