diff --git a/build.gradle.kts b/build.gradle.kts index 64fb392..012c005 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,6 +67,8 @@ subprojects { // Logging implementation("io.github.microutils:kotlin-logging:${Version.Deps.KOTLIN_LOGGING}") + implementation("com.google.code.gson:gson") + // Test testImplementation("org.springframework.boot:spring-boot-starter-test") diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt index 378ca2b..cb6feba 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt @@ -1,9 +1,9 @@ package io.beaniejoy.dongnecafe.common.config -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils -import io.beaniejoy.dongnecafe.security.config.JwtAuthenticationConfigurer -import io.beaniejoy.dongnecafe.security.handler.CustomAccessDeniedHandler -import io.beaniejoy.dongnecafe.security.handler.CustomAuthenticationEntryPoint +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils +import io.beaniejoy.dongnecafe.infra.security.config.JwtAuthenticationConfigurer +import io.beaniejoy.dongnecafe.infra.security.handler.CustomAccessDeniedHandler +import io.beaniejoy.dongnecafe.infra.security.handler.CustomAuthenticationEntryPoint import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.security.servlet.PathRequest import org.springframework.context.annotation.Bean diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt index 18e6789..6c2f96d 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt @@ -1,7 +1,7 @@ package io.beaniejoy.dongnecafe.controller import io.beaniejoy.dongnecafe.common.response.ApplicationResponse -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils import io.beaniejoy.dongnecafe.domain.member.model.request.SignInRequest import io.beaniejoy.dongnecafe.model.TokenResponse import io.beaniejoy.dongnecafe.service.AuthService diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/ApiAuthenticationProvider.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/ApiAuthenticationProvider.kt index 29307ab..9ba37e9 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/ApiAuthenticationProvider.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/ApiAuthenticationProvider.kt @@ -1,6 +1,7 @@ package io.beaniejoy.dongnecafe.security import io.beaniejoy.dongnecafe.common.error.constant.ErrorCode +import io.beaniejoy.dongnecafe.infra.security.SecurityUser import mu.KLogging import org.springframework.security.authentication.AuthenticationProvider import org.springframework.security.authentication.BadCredentialsException diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/UserDetailsServiceImpl.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/UserDetailsServiceImpl.kt index 8b6d771..a349884 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/UserDetailsServiceImpl.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/UserDetailsServiceImpl.kt @@ -4,6 +4,7 @@ import io.beaniejoy.dongnecafe.common.error.constant.ErrorCode import io.beaniejoy.dongnecafe.common.error.exception.BusinessException import io.beaniejoy.dongnecafe.domain.member.entity.Member import io.beaniejoy.dongnecafe.domain.member.repository.MemberRepository +import io.beaniejoy.dongnecafe.infra.security.SecurityUser import mu.KLogging import org.springframework.security.core.authority.SimpleGrantedAuthority import org.springframework.security.core.userdetails.UserDetailsService diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt index 3174200..2545e09 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.common.config -import io.beaniejoy.dongnecafe.security.utils.getAuthPrincipal +import io.beaniejoy.dongnecafe.utils.security.getAuthPrincipal import mu.KLogging import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt new file mode 100644 index 0000000..ae8f253 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt @@ -0,0 +1,50 @@ +package io.beaniejoy.dongnecafe.infra.logging + +import io.beaniejoy.dongnecafe.utils.logging.* +import org.springframework.http.HttpStatus +import org.springframework.web.util.ContentCachingRequestWrapper +import org.springframework.web.util.ContentCachingResponseWrapper + +data class HttpLogMessage( + val httpMethod: String, + val requestUri: String, + val httpStatus: HttpStatus, + val clientIp: String, + val elapsedTime: Double, + val headers: String?, + val requestParam: String?, + val requestBody: String?, + val responseBody: String?, +) { + companion object { + fun createInstance( + requestWrapper: ContentCachingRequestWrapper, + responseWrapper: ContentCachingResponseWrapper, + elapsedTime: Double + ): HttpLogMessage { + return HttpLogMessage( + httpMethod = requestWrapper.method, + requestUri = requestWrapper.requestURI, + httpStatus = HttpStatus.valueOf(responseWrapper.status), + clientIp = requestWrapper.getClientIp(), + elapsedTime = elapsedTime, + headers = requestWrapper.getRequestHeaders(), + requestParam = requestWrapper.getRequestParams(), + requestBody = requestWrapper.getRequestBody(), + responseBody = responseWrapper.getResponseBody(), + ) + } + } + + fun toPrettierLog(): String { + return """ + | + |[REQUEST] ${this.httpMethod} ${this.requestUri} ${this.httpStatus} (${this.elapsedTime}) + |>> CLIENT_IP: ${this.clientIp} + |>> HEADERS: ${this.headers} + |>> REQUEST_PARAM: ${this.requestParam} + |>> REQUEST_BODY: ${this.requestBody} + |>> RESPONSE_BODY: ${this.responseBody} + """.trimMargin() + } +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/ReqResLoggingFilter.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/ReqResLoggingFilter.kt new file mode 100644 index 0000000..67fddcc --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/ReqResLoggingFilter.kt @@ -0,0 +1,57 @@ +package io.beaniejoy.dongnecafe.infra.logging + +import mu.KotlinLogging +import org.slf4j.MDC +import org.springframework.core.Ordered +import org.springframework.core.annotation.Order +import org.springframework.stereotype.Component +import org.springframework.web.filter.OncePerRequestFilter +import org.springframework.web.util.ContentCachingRequestWrapper +import org.springframework.web.util.ContentCachingResponseWrapper +import java.util.* +import javax.servlet.FilterChain +import javax.servlet.http.HttpServletRequest +import javax.servlet.http.HttpServletResponse + +@Component +@Order(Ordered.HIGHEST_PRECEDENCE) +class ReqResLoggingFilter : OncePerRequestFilter() { + private val log = KotlinLogging.logger {} + + companion object { + const val REQUEST_ID = "request_id" + } + + override fun doFilterInternal( + request: HttpServletRequest, + response: HttpServletResponse, + filterChain: FilterChain, + ) { + val cachingRequestWrapper = ContentCachingRequestWrapper(request) + val cachingResponseWrapper = ContentCachingResponseWrapper(response) + + val requestId = UUID.randomUUID().toString().substring(0, 8) + + MDC.put(REQUEST_ID, requestId) + + val startTime = System.currentTimeMillis() + filterChain.doFilter(cachingRequestWrapper, cachingResponseWrapper) + val end = System.currentTimeMillis() + + try { + log.info { + HttpLogMessage.createInstance( + requestWrapper = cachingRequestWrapper, + responseWrapper = cachingResponseWrapper, + elapsedTime = (end - startTime) / 1000.0 + ).toPrettierLog() + } + + cachingResponseWrapper.copyBodyToResponse() + } catch (e: Exception) { + log.error(e) { "[${this::class.simpleName}] Logging 실패" } + } + + MDC.remove(REQUEST_ID) + } +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/constant/HttpClientIp.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/constant/HttpClientIp.kt new file mode 100644 index 0000000..e15ef31 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/constant/HttpClientIp.kt @@ -0,0 +1,17 @@ +package io.beaniejoy.dongnecafe.infra.logging.constant + +/** + * http request client ip possible enum list + * (ref. https://blog.yevgnenll.me/posts/find-client-ip-from-http-request-header) + * @property headerName String client ip header name + */ +enum class HttpClientIp( + val headerName: String, +) { + X_FORWARDED_FOR("X-Forwarded-For"), + PROXY_CLIENT_IP("Proxy-Client-IP"), + WL_PROXY_CLIENT_IP("WL-Proxy-Client-IP"), + HTTP_X_FORWARDED("HTTP_X_FORWARDED"), + HTTP_X_FORWARDED_FOR("HTTP_X_FORWARDED_FOR"), + HTTP_CLIENT_IP("HTTP_CLIENT_IP") +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityUser.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/SecurityUser.kt similarity index 87% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityUser.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/SecurityUser.kt index 17a705d..5f60611 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityUser.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/SecurityUser.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security +package io.beaniejoy.dongnecafe.infra.security import io.beaniejoy.dongnecafe.domain.member.entity.Member import org.springframework.security.core.GrantedAuthority diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/config/JwtAuthenticationConfigurer.kt similarity index 82% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/config/JwtAuthenticationConfigurer.kt index 00e6bb5..faa1f85 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/config/JwtAuthenticationConfigurer.kt @@ -1,7 +1,7 @@ -package io.beaniejoy.dongnecafe.security.config +package io.beaniejoy.dongnecafe.infra.security.config -import io.beaniejoy.dongnecafe.security.filter.JwtAuthenticationFilter -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils +import io.beaniejoy.dongnecafe.infra.security.filter.JwtAuthenticationFilter +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils import org.springframework.security.config.annotation.SecurityConfigurerAdapter import org.springframework.security.config.annotation.web.builders.HttpSecurity import org.springframework.security.web.DefaultSecurityFilterChain diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/constant/SecurityConstant.kt similarity index 80% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/constant/SecurityConstant.kt index 9371644..070313d 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/constant/SecurityConstant.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security.constant +package io.beaniejoy.dongnecafe.infra.security.constant object SecurityConstant { const val BEARER = "Bearer" diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/filter/JwtAuthenticationFilter.kt similarity index 86% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/filter/JwtAuthenticationFilter.kt index 5df9a40..2d6776a 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/filter/JwtAuthenticationFilter.kt @@ -1,8 +1,8 @@ -package io.beaniejoy.dongnecafe.security.filter +package io.beaniejoy.dongnecafe.infra.security.filter -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.BEARER -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.WHITESPACE +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.BEARER +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.WHITESPACE import mu.KotlinLogging import org.springframework.http.HttpHeaders import org.springframework.security.core.context.SecurityContextHolder diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAccessDeniedHandler.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAccessDeniedHandler.kt similarity index 93% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAccessDeniedHandler.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAccessDeniedHandler.kt index 5c6701e..8069005 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAccessDeniedHandler.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAccessDeniedHandler.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security.handler +package io.beaniejoy.dongnecafe.infra.security.handler import mu.KLogging import org.springframework.security.access.AccessDeniedException diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAuthenticationEntryPoint.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAuthenticationEntryPoint.kt similarity index 93% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAuthenticationEntryPoint.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAuthenticationEntryPoint.kt index 93b0287..c3361dd 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAuthenticationEntryPoint.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAuthenticationEntryPoint.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security.handler +package io.beaniejoy.dongnecafe.infra.security.handler import mu.KLogging import org.springframework.security.core.AuthenticationException diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt new file mode 100644 index 0000000..a7a1ef7 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt @@ -0,0 +1,45 @@ +package io.beaniejoy.dongnecafe.utils.logging + +import com.google.gson.Gson +import io.beaniejoy.dongnecafe.infra.logging.constant.HttpClientIp +import org.springframework.web.util.ContentCachingRequestWrapper +import org.springframework.web.util.ContentCachingResponseWrapper +import javax.servlet.http.HttpServletRequest + +fun HttpServletRequest.getRequestHeaders(): String? { + val request = this + return Gson().toJson( + mutableMapOf().apply { + request.headerNames.toList().forEach { + this[it] = request.getHeader(it) + } + } + ) +} + +fun HttpServletRequest.getRequestParams(): String { + return this.parameterMap.mapValues { + it.value.joinToString(",") + }.entries.joinToString("&") +} + +fun HttpServletRequest.getClientIp(): String { + HttpClientIp.values().forEach { clientIpHeader -> + this.getHeader(clientIpHeader.headerName).also { + if (it.isNullOrBlank().not() && "unknown".equals(it, true).not()) { + return it + } + } + } + + return this.remoteAddr +} + +fun ContentCachingRequestWrapper.getRequestBody(): String { + return this.contentAsByteArray.toString(Charsets.UTF_8) +} + +// TODO: logging response body maximum size 고려 +fun ContentCachingResponseWrapper.getResponseBody(): String { + return this.contentAsByteArray.toString(Charsets.UTF_8) +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/JwtTokenUtils.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt similarity index 92% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/JwtTokenUtils.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt index fb39ae1..81c20fd 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/JwtTokenUtils.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt @@ -1,7 +1,7 @@ -package io.beaniejoy.dongnecafe.security.utils +package io.beaniejoy.dongnecafe.utils.security -import io.beaniejoy.dongnecafe.security.SecurityUser -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.JWT_AUTHORITIES_KEY +import io.beaniejoy.dongnecafe.infra.security.SecurityUser +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.JWT_AUTHORITIES_KEY import io.jsonwebtoken.Claims import io.jsonwebtoken.ExpiredJwtException import io.jsonwebtoken.Jwts diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/SecurityExtensions.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt similarity index 60% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/SecurityExtensions.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt index 008c912..b4b6c7c 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/SecurityExtensions.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt @@ -1,7 +1,7 @@ -package io.beaniejoy.dongnecafe.security.utils +package io.beaniejoy.dongnecafe.utils.security -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.ANONYMOUS_USER -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.ROLE_ANONYMOUS +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.ANONYMOUS_USER +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.ROLE_ANONYMOUS import org.springframework.security.core.Authentication fun Authentication.getAuthPrincipal() : String? { diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt index 12ae6fc..8529490 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt @@ -1,9 +1,9 @@ package io.beaniejoy.dongnecafe.common.config -import io.beaniejoy.dongnecafe.security.config.JwtAuthenticationConfigurer -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils -import io.beaniejoy.dongnecafe.security.handler.CustomAccessDeniedHandler -import io.beaniejoy.dongnecafe.security.handler.CustomAuthenticationEntryPoint +import io.beaniejoy.dongnecafe.infra.security.config.JwtAuthenticationConfigurer +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils +import io.beaniejoy.dongnecafe.infra.security.handler.CustomAccessDeniedHandler +import io.beaniejoy.dongnecafe.infra.security.handler.CustomAuthenticationEntryPoint import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.security.servlet.PathRequest import org.springframework.context.annotation.Bean diff --git a/dongne-service-api/src/main/resources/application.yml b/dongne-service-api/src/main/resources/application.yml index 55d9795..bae37d9 100644 --- a/dongne-service-api/src/main/resources/application.yml +++ b/dongne-service-api/src/main/resources/application.yml @@ -14,6 +14,9 @@ spring: devtools: livereload: enabled: false # no use devtools' LiveReload Server + security: + filter: + order: 10 logging: level: diff --git a/dongne-service-api/src/main/resources/logback-spring.xml b/dongne-service-api/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..3edf5ab --- /dev/null +++ b/dongne-service-api/src/main/resources/logback-spring.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + ${LOG_PATTERN} + + + + + + + + + + + + + + + + + + \ No newline at end of file