Dies ist eine Demo für die Verwendung von JWT (JSON Web Token) mit Spring Security und Spring Boot . Ich habe meine erste Version komplett neu geschrieben. Diese Lösung basiert nun auf der Codebasis des JHipster-Projekts. Ich habe versucht, die minimale Konfiguration und die Klassen zu extrahieren, die für die JWT-Authentifizierung erforderlich sind, und habe einige Änderungen vorgenommen.
Diese Demo wurde mit Maven 3.6.x und Java 11 erstellt.
Starten Sie die Anwendung einfach mit dem Spring Boot-Maven-Plugin ( mvn spring-boot:run
). Die Anwendung wird unter http://localhost:8080 ausgeführt.
Sie können die H2-Konsole zum Erkunden der Datenbank unter http://localhost:8080/h2-console verwenden:
Es sind drei Benutzerkonten vorhanden, um die unterschiedlichen Zugriffsebenen auf die Endpunkte in der API und die verschiedenen Autorisierungsausnahmen zu veranschaulichen:
Admin - admin:admin
User - user:password
Disabled - disabled:password (this user is deactivated)
Es gibt vier Endpunkte, die für die Demo sinnvoll sind:
/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)
Ich habe einen kleinen Javascript-Client geschrieben und einige Kommentare in den Code eingefügt, die diese Demo hoffentlich verständlich machen. Sie finden es unter /src/main/resources/static/js/client.js.
Ich verwende bcrypt, um Passwörter zu verschlüsseln. Sie können Ihre Hashes mit diesem einfachen Tool generieren: Bcrypt Generator
Tatsächlich verwendet diese Demo eine eingebettete H2-Datenbank, die automatisch von Spring Boot konfiguriert wird. Wenn Sie eine Verbindung zu einer anderen Datenbank herstellen möchten, müssen Sie die Verbindung in der application.yml im Ressourcenverzeichnis angeben. Hier ist ein Beispiel für eine MySQL-Datenbank:
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
Hinweis: Bei anderen Datenbanken wie MySQL funktionieren Sequenzen nicht zur ID-Generierung. Daher müssen Sie den GenerationType in den Entity Beans auf „AUTO“ oder „IDENTITY“ ändern.
Eine Referenz aller Anwendungseigenschaften finden Sie hier.
#81
Dieses Projekt verfügt über ein Docker-Image. Sie finden es unter https://hub.docker.com/r/hubae/jwt-spring-security-demo/.
Wenn Sie projektbezogene Fragen haben, schauen Sie sich bitte die früheren Fragen an oder erstellen Sie ein neues Ticket mit Ihrer Frage.
Wenn Sie Fragen haben, die nicht direkt mit diesem Projekt zusammenhängen (z. B. häufige Fragen zum Spring Framework oder Spring Security usw.), durchsuchen Sie bitte das Internet oder schauen Sie sich Stackoverflow an.
Tut mir leid, aber ich bin gerade sehr beschäftigt und habe nicht viel Zeit.
Stephan Zerhusen
Der Code wird unter der MIT-Lizenz veröffentlicht.
Bitte senden Sie mir gerne Feedback oder Fragen!