Spring Security 및 Spring Boot 와 함께 JWT(JSON Web Token)를 사용하는 데모입니다. 나는 첫 번째 버전을 완전히 다시 썼습니다. 이제 이 솔루션은 JHipster 프로젝트의 코드 베이스를 기반으로 합니다. JWT 인증에 필요한 최소한의 구성과 클래스를 추출하고 일부 변경을 시도했습니다.
이 데모는 Maven 3.6.x 및 Java 11을 사용하여 빌드되었습니다.
Spring Boot maven 플러그인( mvn spring-boot:run
)을 사용하여 애플리케이션을 시작하세요. 응용 프로그램은 http://localhost:8080에서 실행 중입니다.
http://localhost:8080/h2-console에서 데이터베이스를 탐색하기 위해 H2-콘솔을 사용할 수 있습니다.
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
실제로 이 데모는 Spring Boot에 의해 자동으로 구성되는 임베디드 H2 데이터베이스를 사용하고 있습니다. 다른 데이터베이스에 연결하려면 리소스 디렉터리의 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 생성에 작동하지 않습니다. 따라서 엔터티 Bean의 GenerationType을 'AUTO' 또는 'IDENTITY'로 변경해야 합니다.
여기에서 모든 애플리케이션 속성에 대한 참조를 찾을 수 있습니다.
#81
이 프로젝트에는 도커 이미지가 있습니다. https://hub.docker.com/r/hubae/jwt-spring-security-demo/에서 찾을 수 있습니다.
프로젝트 관련 질문이 있는 경우 이전 질문을 살펴보거나 해당 질문으로 새 티켓을 만드세요.
이 프로젝트와 직접적으로 관련되지 않은 질문이 있는 경우(예: Spring Framework 또는 Spring Security에 대한 일반적인 질문 등) 웹을 검색하거나 Stackoverflow를 살펴보세요.
죄송하지만 지금은 너무 바빠서 시간이 별로 없습니다.
스테판 제르후센
코드는 MIT 라이센스에 따라 공개됩니다.
언제든지 피드백이나 질문을 보내주세요!