2024.01.06 - [웹/Spring vue 웹 개발] - JWT(json web token) 개발하며 이해하기

 

JWT(json web token) 개발하며 이해하기

JWT 구조 이해헤더(Header): 토큰의 타입 (주로 JWT)과 사용된 해싱 알고리즘 (예: HMAC, SHA256, RSA)을 명시합니다.페이로드(Payload): 토큰에 담을 클레임(claims)을 포함합니다. 클레임은 토큰 사용자에 대

kwaksh2319.tistory.com

 

https://youtu.be/Q7V7R3bhRQg

 

 

이번에 jwt 토큰을 개발하면서 swagger에 간단히 적용해봤습니다.

package kr.co.kshproject.webDemo.Common;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.media.StringSchema;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import org.springdoc.core.GroupedOpenApi;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;

import java.util.ArrayList;
import java.util.List;


@Configuration
public class SwaggerConfig {

    @Bean
    public SecurityScheme customSecurityScheme() {
        return new SecurityScheme()
                .type(SecurityScheme.Type.HTTP)
                .scheme("bearer")
                .bearerFormat("JWT")
                .in(SecurityScheme.In.HEADER)
                .name(HttpHeaders.AUTHORIZATION);
    }

    @Bean
    public GroupedOpenApi commonApi() {
        return GroupedOpenApi.builder()
                .group("api")
                .addOpenApiCustomiser(serverCustomizer())
                .packagesToScan("kr.co.kshproject.webDemo")
                .pathsToMatch("/**")
                .build();
    }

    @Bean
    public OpenApiCustomiser serverCustomizer() {
        return openApi -> {
            // 기존 Components 객체에 접근
            Components components = openApi.getComponents();
            if (components == null) components = new Components();

            // ErrorResult 스키마 추가
            components.addSchemas("ErrorResult", new Schema<>()
                    .type("object")
                    .addProperty("message", new StringSchema())
                    .addProperty("errorCode", new StringSchema()));

            // SecurityScheme 추가
            openApi.addSecurityItem(new SecurityRequirement().addList("bearerAuth")); // 엔드포인트 전부 적용
            components.addSecuritySchemes("bearerAuth", customSecurityScheme());  // swagger auth 버튼 
            openApi.components(components);

            List<Server> servers=new ArrayList<>();
            servers.add(new Server().url("http://localhost:8080").description("for local usages"));
            openApi.setServers(servers);
        };
    }
}

 

 

+ Recent posts