Skip to content

Commit f973d94

Browse files
committed
feat: 오류코드 정합
1 parent 18badc2 commit f973d94

28 files changed

+420
-118
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ replay_pid*
2525
.gradle/
2626
build/
2727
application-local.yml
28+
.idea/sonarlint/

.idea/sonarlint/issuestore/index.pb

+107
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/sonarlint/securityhotspotstore/index.pb

+107
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
package co.bearus.magcloud.advice
22

3-
import co.bearus.magcloud.domain.exception.UnauthorizedException
4-
import co.bearus.magcloud.provider.TokenProvider
3+
import co.bearus.magcloud.config.filter.APIKeyAuthentication
4+
import co.bearus.magcloud.domain.exception.UnAuthenticatedException
55
import org.springframework.core.MethodParameter
6+
import org.springframework.security.core.context.SecurityContextHolder
67
import org.springframework.stereotype.Component
78
import org.springframework.web.bind.support.WebDataBinderFactory
89
import org.springframework.web.context.request.NativeWebRequest
910
import org.springframework.web.method.support.HandlerMethodArgumentResolver
1011
import org.springframework.web.method.support.ModelAndViewContainer
1112

1213
@Component
13-
class RequestUserArgumentResolver(private val tokenService: TokenProvider) : HandlerMethodArgumentResolver {
14+
class RequestUserArgumentResolver : HandlerMethodArgumentResolver {
1415
override fun supportsParameter(parameter: MethodParameter): Boolean {
1516
return parameter.getParameterAnnotation(RequestUser::class.java) != null
1617
}
@@ -21,9 +22,8 @@ class RequestUserArgumentResolver(private val tokenService: TokenProvider) : Han
2122
webRequest: NativeWebRequest,
2223
binderFactory: WebDataBinderFactory?,
2324
): Any {
24-
val token = webRequest.getHeader("X-AUTH-TOKEN")
25-
val userId =
26-
tokenService.getIdFromToken(token ?: throw UnauthorizedException()) ?: throw UnauthorizedException()
27-
return WebUser(userId)
25+
val authorization = SecurityContextHolder.getContext().authentication
26+
if (authorization !is APIKeyAuthentication) throw UnAuthenticatedException()
27+
return WebUser(authorization.name)
2828
}
2929
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package co.bearus.magcloud.config
22

3+
import co.bearus.magcloud.controller.dto.response.ErrorResponse
34
import co.bearus.magcloud.domain.exception.DomainException
4-
import co.bearus.magcloud.domain.exception.NotFoundException
5-
import co.bearus.magcloud.domain.exception.UnauthorizedException
5+
import co.bearus.magcloud.domain.exception.ErrorCode
6+
import co.bearus.magcloud.domain.exception.UnAuthenticatedException
7+
import co.bearus.magcloud.domain.exception.UnAuthorizedException
8+
import co.bearus.magcloud.domain.type.ContextLanguage
9+
import jakarta.servlet.http.HttpServletRequest
610
import org.springframework.http.ResponseEntity
711
import org.springframework.web.bind.MethodArgumentNotValidException
812
import org.springframework.web.bind.annotation.ExceptionHandler
@@ -11,36 +15,70 @@ import org.springframework.web.bind.annotation.RestControllerAdvice
1115
@RestControllerAdvice
1216
class ControllerAdvice {
1317
@ExceptionHandler
14-
fun userExHandle(e: NotFoundException): ResponseEntity<co.bearus.magcloud.controller.dto.response.APIResponse>? {
15-
return ResponseEntity.notFound().build()
18+
fun validationException(
19+
exception: MethodArgumentNotValidException,
20+
request: HttpServletRequest,
21+
): ResponseEntity<ErrorResponse> {
22+
return ResponseEntity
23+
.badRequest()
24+
.body(
25+
errorBody(ErrorCode.VALIDATION_EXCEPTION, request.getLanguage())
26+
)
1627
}
1728

18-
@ExceptionHandler
19-
fun validationException(e: MethodArgumentNotValidException): ResponseEntity<co.bearus.magcloud.controller.dto.response.APIResponse>? {
20-
return ResponseEntity.badRequest()
29+
@ExceptionHandler(value = [UnAuthenticatedException::class])
30+
fun handleUnAuthenticated(
31+
exception: UnAuthenticatedException,
32+
request: HttpServletRequest,
33+
): ResponseEntity<ErrorResponse> {
34+
return ResponseEntity
35+
.status(401)
2136
.body(
22-
co.bearus.magcloud.controller.dto.response.APIResponse.error(
23-
e.fieldErrors.firstOrNull()?.defaultMessage ?: "알 수 없는 오류입니다"
24-
)
37+
errorBody(exception.errorCode, request.getLanguage())
2538
)
2639
}
2740

28-
@ExceptionHandler
29-
fun unauthorized(e: UnauthorizedException): ResponseEntity<co.bearus.magcloud.controller.dto.response.APIResponse>? {
30-
return ResponseEntity.status(401)
31-
.body(co.bearus.magcloud.controller.dto.response.APIResponse.error("토큰이 만료되었거나 사용할 수 없습니다"))
41+
@ExceptionHandler(value = [UnAuthorizedException::class])
42+
fun handleUnAuthorized(
43+
exception: UnAuthorizedException,
44+
request: HttpServletRequest,
45+
): ResponseEntity<ErrorResponse> {
46+
return ResponseEntity
47+
.status(403)
48+
.body(
49+
errorBody(exception.errorCode, request.getLanguage())
50+
)
3251
}
3352

34-
@ExceptionHandler
35-
fun userExHandle(e: DomainException): ResponseEntity<co.bearus.magcloud.controller.dto.response.APIResponse>? {
36-
return ResponseEntity.badRequest()
37-
.body(co.bearus.magcloud.controller.dto.response.APIResponse.error(e.message!!))
53+
@ExceptionHandler(value = [DomainException::class])
54+
fun handleDomainException(
55+
exception: DomainException,
56+
request: HttpServletRequest,
57+
): ResponseEntity<ErrorResponse> {
58+
return ResponseEntity
59+
.badRequest()
60+
.body(
61+
errorBody(exception.errorCode, request.getLanguage())
62+
)
3863
}
3964

4065
@ExceptionHandler
41-
fun defaultHandle(e: RuntimeException): ResponseEntity<co.bearus.magcloud.controller.dto.response.APIResponse>? {
42-
e.printStackTrace()
43-
return ResponseEntity.badRequest()
44-
.body(co.bearus.magcloud.controller.dto.response.APIResponse.error("알 수 없는 오류가 발생했습니다"))
66+
fun unhandledException(
67+
exception: Exception,
68+
request: HttpServletRequest,
69+
): ResponseEntity<ErrorResponse> {
70+
exception.printStackTrace()
71+
return ResponseEntity
72+
.badRequest()
73+
.body(
74+
errorBody(ErrorCode.UNKNOWN_EXCEPTION, request.getLanguage())
75+
)
4576
}
77+
78+
private fun errorBody(errorCode: ErrorCode, contextLanguage: ContextLanguage) = ErrorResponse(
79+
code = errorCode.code,
80+
message = errorCode.message[contextLanguage] ?: errorCode.code,
81+
)
82+
83+
private fun HttpServletRequest.getLanguage() = this.getAttribute("language") as ContextLanguage
4684
}

0 commit comments

Comments
 (0)