這是一個將JWT(JSON Web Token)與Spring Security和Spring Boot結合的示範。我完全重寫了我的第一個版本。現在這個解決方案是基於 JHipster 專案的程式碼庫。我嘗試提取 JWT 身份驗證所需的最少配置和類,並做了一些更改。
該演示是使用 Maven 3.6.x 和 Java 11 建構的。
只需使用 Spring Boot maven 插件 ( mvn spring-boot:run
) 啟動應用程式。該應用程式正在 http://localhost:8080 上運行。
您可以使用H2-Console瀏覽 http://localhost:8080/h2-console 下的資料庫:
存在三個使用者帳戶來演示對 API 中端點的不同存取等級以及不同的授權例外:
Admin - admin:admin
User - user:password
Disabled - disabled:password (this user is deactivated)
對於演示來說,有四個合理的端點:
/api/authenticate - authentication endpoint with unrestricted access
/api/user - returns detail information for an authenticated user (a valid JWT token must be present in the request header)
/api/persons - an example endpoint that is restricted to authorized users with the authority 'ROLE_USER' (a valid JWT token must be present in the request header)
/api/hiddenmessage - an example endpoint that is restricted to authorized users with the authority 'ROLE_ADMIN' (a valid JWT token must be present in the request header)
我編寫了一個小型 Javascript 用戶端,並在程式碼中添加了一些註釋,希望能讓這個演示易於理解。您可以在/src/main/resources/static/js/client.js 中找到它。
我正在使用 bcrypt 對密碼進行編碼。您可以使用這個簡單的工具來產生雜湊值:Bcrypt Generator
其實這個demo使用的是Spring Boot自動配置的嵌入式H2資料庫。如果要連接到另一個資料庫,則必須在資源目錄中的application.yml中指定連線。以下是 MySQL 資料庫的範例:
spring:
jpa:
hibernate:
# possible values: validate | update | create | create-drop
ddl-auto: create-drop
datasource:
url: jdbc:mysql://localhost/myDatabase
username: myUser
password: myPassword
driver-class-name: com.mysql.jdbc.Driver
提示:對於其他資料庫(例如 MySQL),序列不適用於 ID 產生。因此,您必須將實體 bean 中的 GenerationType 變更為「AUTO」或「IDENTITY」。
您可以在此處找到所有應用程式屬性的參考。
第81章
該專案有一個 docker 映像。您可以在 https://hub.docker.com/r/hubae/jwt-spring-security-demo/ 找到它。
如果您有與項目相關的問題,請查看過去的問題或根據您的問題建立新的票證。
如果您有與該項目不直接相關的問題(例如 Spring 框架或 Spring Security 等的常見問題),請搜尋網路或查看 Stackoverflow。
抱歉,我現在很忙,沒有太多時間。
史蒂芬·澤胡森
該程式碼是根據 MIT 許可證發布的。
請隨時向我發送一些反饋或問題!