본문 바로가기

카테고리 없음

스웨거 설정

오늘은 소셜로그인에 도전하기로 했다.

그러기 위해 우선 스웨거를 쓸수 있어야 한다.

그래서 SwaggerConfig를 만들었다.

@Configuration
class SwaggerConfig {

    @Bean
    fun openAPI(): OpenAPI {
        return OpenAPI()
            .addSecurityItem(
                SecurityRequirement().addList("Bearer Authentication")
            )
            .components(
                Components().addSecuritySchemes(
                    "Bearer Authentication",
                    SecurityScheme()
                        .type(SecurityScheme.Type.HTTP)
                        .scheme("Bearer")
                        .bearerFormat("JWT")
                        .`in`(SecurityScheme.In.HEADER)
                        .name("Authorization")
                ),
            )
            .info(
                Info()
                    .title("Sudadark API")
                    .description("Sudadark API schema")
                    .version("1.0.0"),
            )
    }
}

 

그리고 

@Component
class JwtAuthenticationFilter(
    private val jwtPlugin: JwtPlugin
) : OncePerRequestFilter() {

    @Throws(IOException::class, ServletException::class)
    override fun doFilterInternal(
        request: HttpServletRequest,
        response: HttpServletResponse,
        chain: FilterChain
    ) {
        val header = request.getHeader("Authorization")

        if (header == null || !header.startsWith("Bearer ")) {
            chain.doFilter(request, response)
            return
        }

        val token = header.replace("Bearer ", "")
        val result = jwtPlugin.validateToken(token)

        if (result.isSuccess) {
            val claims: Jws<Claims> = result.getOrNull() ?: return
            val body = claims.body
            val email = body["email"] as String
            val nickname = body["nickname"] as String

            val authorities = mutableListOf<GrantedAuthority>()
            // 예를 들어, 클레임에서 roles를 추출하여 authorities에 추가하는 방법
            // val roles = body["roles"] as List<String>
            // roles.forEach { role -> authorities.add(SimpleGrantedAuthority(role)) }

            val authentication = JwtAuthenticationToken(token, email, nickname, authorities)
            SecurityContextHolder.getContext().authentication = authentication
        }

        chain.doFilter(request, response)
    }
}

Parameter 0 of constructor in org.example.domain.infra.securety.SecurityConfig required a bean of type 'org.example.domain.infra.jwt.JwtAuthenticationFilter' that could not be found. 이 오류가 나왔는데,

이것은 위에 보여줬듯이 @Component를 넣어서 해결했다.

 

그런데, 스웨거 화면이 뜨지 않고 이상한 화면이 떠서 고생했는데, 단순히 주소를 잘못 입력한거였다. 허무하다..

 

 

우선은 카톡이다. 

https://developers.kakao.com/에 들어가서 가입한후 내 앱을 등록한다. 그걸 위해서 이미지도 만들어야 한다. 그다음엔 안드로이드,ios, 웹중에 웹을 선택하고 로컬호스트8080으로 등록을 했다.