นี่คือการสาธิตการใช้ JWT (JSON Web Token) กับ Spring Security และ Spring Boot ฉันเขียนเวอร์ชันแรกของฉันใหม่ทั้งหมด ตอนนี้โซลูชันนี้อิงตามฐานโค้ดจากโครงการ JHipster ฉันพยายามแยกการกำหนดค่าขั้นต่ำและคลาสที่จำเป็นสำหรับ JWT-Authentication และทำการเปลี่ยนแปลงบางอย่าง
การสาธิตนี้สร้างด้วย 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
จริงๆ แล้วการสาธิตนี้ใช้ฐานข้อมูล H2 แบบฝังที่ Spring Boot กำหนดค่าโดยอัตโนมัติ หากคุณต้องการเชื่อมต่อกับฐานข้อมูลอื่น คุณต้องระบุการเชื่อมต่อใน application.yml ในไดเร็กทอรีทรัพยากร นี่คือตัวอย่างสำหรับ MySQL DB:
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 ดังนั้นคุณต้องเปลี่ยน GenerationType ในเอนทิตี bean เป็น 'AUTO' หรือ 'IDENTITY'
คุณสามารถดูข้อมูลอ้างอิงของคุณสมบัติของแอปพลิเคชันทั้งหมดได้ที่นี่
#81
โครงการนี้มีอิมเมจนักเทียบท่า คุณสามารถค้นหาได้ที่https://hub.docker.com/r/hubae/jwt-spring-security-demo/
หากคุณมีคำถามเกี่ยวกับโครงการ โปรดดูคำถามที่ผ่านมาหรือสร้างตั๋วใหม่ที่มีคำถามของคุณ
หากคุณมีคำถามที่ไม่เกี่ยวข้องโดยตรงกับโปรเจ็กต์นี้ (เช่น คำถามทั่วไปเกี่ยวกับ Spring Framework หรือ Spring Security เป็นต้น) โปรดค้นหาเว็บหรือดูที่ Stackoverflow
ขอโทษด้วย แต่ตอนนี้ฉันยุ่งมากและไม่ค่อยมีเวลา
สเตฟาน เซอร์ฮูเซ่น
รหัสนี้เผยแพร่ภายใต้ใบอนุญาต MIT
โปรดส่งข้อเสนอแนะหรือคำถามมาให้ฉัน!