From 153aaf76088176e3c9d013ced9cb42a555459e50 Mon Sep 17 00:00:00 2001 From: TonCherAmi Date: Mon, 9 Aug 2021 12:29:11 +0300 Subject: [PATCH] Add access denied resolver (#42) --- exception-handler-spring-web/build.gradle.kts | 1 + .../handler/dto/ExceptionResolverResult.kt | 10 +++++++++ .../AccessDeniedExceptionResolver.kt | 22 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 exception-handler-spring-web/src/main/kotlin/ru/touchin/exception/handler/spring/resolvers/AccessDeniedExceptionResolver.kt diff --git a/exception-handler-spring-web/build.gradle.kts b/exception-handler-spring-web/build.gradle.kts index 74988d5..1bbdb21 100644 --- a/exception-handler-spring-web/build.gradle.kts +++ b/exception-handler-spring-web/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("org.springframework.boot:spring-boot-starter-web") + implementation("org.springframework.boot:spring-boot-starter-security") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin") diff --git a/exception-handler-spring-web/src/main/kotlin/ru/touchin/exception/handler/dto/ExceptionResolverResult.kt b/exception-handler-spring-web/src/main/kotlin/ru/touchin/exception/handler/dto/ExceptionResolverResult.kt index 7b83187..2b87ee0 100644 --- a/exception-handler-spring-web/src/main/kotlin/ru/touchin/exception/handler/dto/ExceptionResolverResult.kt +++ b/exception-handler-spring-web/src/main/kotlin/ru/touchin/exception/handler/dto/ExceptionResolverResult.kt @@ -11,6 +11,7 @@ data class ExceptionResolverResult( ) { companion object { + fun createInternalError(errorMessage: String?): ExceptionResolverResult { return ExceptionResolverResult( apiError = DefaultApiError.createFailure(errorMessage), @@ -37,6 +38,15 @@ data class ExceptionResolverResult( exception = exception ) } + + fun createAccessDeniedError(exception: Exception?): ExceptionResolverResult { + return ExceptionResolverResult( + apiError = DefaultApiError.createFailure(exception?.message), + status = HttpStatus.FORBIDDEN, + exception = exception, + ) + } + } } diff --git a/exception-handler-spring-web/src/main/kotlin/ru/touchin/exception/handler/spring/resolvers/AccessDeniedExceptionResolver.kt b/exception-handler-spring-web/src/main/kotlin/ru/touchin/exception/handler/spring/resolvers/AccessDeniedExceptionResolver.kt new file mode 100644 index 0000000..42630b1 --- /dev/null +++ b/exception-handler-spring-web/src/main/kotlin/ru/touchin/exception/handler/spring/resolvers/AccessDeniedExceptionResolver.kt @@ -0,0 +1,22 @@ +package ru.touchin.exception.handler.spring.resolvers + +import org.springframework.core.annotation.Order +import org.springframework.security.access.AccessDeniedException +import org.springframework.stereotype.Component +import ru.touchin.common.exceptions.CommonNotFoundException +import ru.touchin.common.spring.Ordered +import ru.touchin.exception.handler.dto.ExceptionResolverResult + +@Order(Ordered.LOW) +@Component +class AccessDeniedExceptionResolver : ExceptionResolver { + + override fun invoke(exception: Exception): ExceptionResolverResult? { + if (exception is AccessDeniedException) { + return ExceptionResolverResult.createAccessDeniedError(exception) + } + + return null + } + +}