2016-11-10 64 views
0

我的Spring Boot網絡應用程序使用帶有spring-boot-security的表單身份驗證。
我有兩個表:
用戶Spring引導安全 - 在啓動時創建root用戶

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用戶在邏輯上必須在add-more-users動作之前存在。

我已經試過

  • 我跑SQL腳本包含根用戶插入語句之前我部署的應用程序。很明顯,我還必須爲這個root用戶手動生成一個加密密碼。
  • 我在語法上運行一個sql腳本來插入根憑證。我擔心的是將我的ROOT用戶憑據包含在data.sql文件中可能並不安全。如果我把密碼的加密版本,我必須事先進行加密。

我能想到的另一種方式是,我可以創造一個根創建頁面僅在第一次應用程序啓動。除了用戶名和密碼外,我還需要一個祕密代碼(只有我和應用程序都知道),以便其他隨機人員不能創建root帳戶。

這些是常見的方法嗎?
如果不是,有哪些好方法?

+0

可以執行刪除/插入或更新/插入查詢務實在啓動時生成的加密密碼 – sura2k

回答

1

如果您使用的是Spring Boot,您只需將schema.sql和data.sql腳本放置在資源類路徑中。

schema.sql將負責創建您的表和它們之間的關聯,並且data.sql將負責用數據初始化您的表,因此您可以將您的插入語句放到表語句中。

當您上傳服務時,這些腳本將被Spring Boot自動執行每次上傳。

進一步閱讀看看:

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

+0

感謝。我有點已經做了你在我的第一種方法中建議的。我擔心的是將我的ROOT用戶憑據包含在data.sql文件中可能並不安全。如果我把密碼的加密版本,我必須事先進行加密。我想知道是否有更優雅的方式來做到這一點。 –

+0

你爲什麼認爲它不安全?此腳本無法通過您的服務訪問。 –

+0

我總是認爲把密碼放在一個文件裏是一個壞主意。我明白,如果我的服務器,源代碼回購和我的工作站完全免受黑客攻擊,那麼將密碼存儲在文件中並沒有什麼壞處。 –

相關問題