java - Spring Boot 安全性 - 启动时创建 root 用户

标签 java spring spring-mvc spring-security spring-boot

我的 Spring Boot Web 应用程序使用带有 spring-boot-security 的表单例份验证。
我有两张 table :
用户

CREATE TABLE user
(
    id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL,
    password CHAR(60) NOT NULL,
    //...
);

角色

CREATE TABLE role
(
    id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    r_name VARCHAR(45) NOT NULL
);
CREATE UNIQUE INDEX sys_role_r_name_uindex ON sys_role (r_name);  

连接表

CREATE TABLE ref_user_role
(
    user_id INT(11) NOT NULL,
    role_id INT(11) NOT NULL,
    // ...
);

为了添加更多具有其他角色/权限的用户,必须是 sys_role 表中的角色 ROLE_ROOT。从逻辑上讲,该 root 用户必须在添加更多用户操作之前存在。

我尝试过是这样的

  • 在部署应用程序之前,我运行了一个包含 root-user-insertion 语句的 sql 脚本。显然,我还必须手动为该 root 用户生成加密密码。
  • 我按照语法运行 SQL 脚本来插入根凭据。我担心的是,将我的 ROOT 用户凭据包含在 data.sql 文件中可能不安全。如果我输入加密版本的密码,我必须事先对其进行加密。

另一种方法我能想到的是,我只能在应用程序第一次启动时创建根创建页面。除了用户名和密码之外,我还需要一个 secret 代码(只有我和应用程序知道),这样其他人就无法创建根帐户。

这些是执行此操作的常见方法吗?
如果没有的话,有什么好的方法吗?

最佳答案

如果您使用 Spring Boot,您所要做的就是将 schema.sql 和 data.sql 脚本放置在资源类路径中。

schema.sql 将负责创建表以及它们之间的关联,而 data.sql 将负责用数据初始化表,因此您可以将 insert into rows 语句放在那里。

当您上传服务时,Spring Boot 每次上传时都会自动执行这些脚本。

要进一步阅读,请查看:

http://docs.spring.io/spring-boot/docs/1.4.2.RELEASE/reference/htmlsingle/#howto-database-initialization

关于java - Spring Boot 安全性 - 启动时创建 root 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40518276/

相关文章:

java - 除了 hibernate-validator 之外,LocalValidatorFactoryBean 的实现?

java - spring getbean 是否区分大小写?

java - Spring MVC @Controller 的处理程序方法的参数如何在运行时自动解析?

java - Spring Boot MVC 的 web.xml <jsp-config> 等效项?

java - 我在 IntelliJ IDEA 中使用 Artifacts 有什么用?

java - Java 中的返回方法出现乱序

spring - Grails Spring 安全困惑

java - 如何处理ajax确认对话框是或否

java - 如何获取所有别名形式ImmutableOpenMap <String,List <AliasMetaData >>

java - 谁能告诉我们是什么!方法? "java.io.FileNotFoundException: JAR entry WEB-INF/lib/antlr-runtime-3.5.2.jar!/not found"