오늘은 소셜로그인에 도전하기로 했다.
그러기 위해 우선 스웨거를 쓸수 있어야 한다.
그래서 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으로 등록을 했다.