هذا عرض توضيحي لاستخدام 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:
توجد ثلاثة حسابات مستخدمين لتوضيح المستويات المختلفة للوصول إلى نقاط النهاية في واجهة برمجة التطبيقات واستثناءات التفويض المختلفة:
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:
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، لا تعمل لإنشاء المعرفات. لذلك يتعين عليك تغيير GenerationType في وحدات الكيان إلى "AUTO" أو "IDENTITY".
يمكنك العثور على مرجع لجميع خصائص التطبيق هنا.
#81
يحتوي هذا المشروع على صورة عامل إرساء. يمكنك العثور عليه على https://hub.docker.com/r/hubae/jwt-spring-security-demo/.
إذا كانت لديك أسئلة متعلقة بالمشروع، يرجى إلقاء نظرة على الأسئلة السابقة أو إنشاء تذكرة جديدة تتضمن سؤالك.
إذا كانت لديك أسئلة لا تتعلق مباشرة بهذا المشروع (على سبيل المثال، الأسئلة الشائعة حول Spring Framework أو Spring Security وما إلى ذلك) فيرجى البحث في الويب أو الاطلاع على Stackoverflow.
آسف لذلك ولكني مشغول جدًا حاليًا وليس لدي الكثير من الوقت.
ستيفان زرهوسن
يتم إصدار الكود بموجب ترخيص MIT.
لا تتردد في ارسال لي بعض التعليقات أو الأسئلة!