From 3e7b928d8f690a58554da400c36cdd2a98822549 Mon Sep 17 00:00:00 2001 From: Hanbin Lee Date: Mon, 20 Feb 2023 00:40:37 +0900 Subject: [PATCH] =?UTF-8?q?[#34]=20feat:=20JPA=20Auditing=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - auditor에 Security Authentication 적용(createdBy, updatedBy) - BaseEntity, BaseTimeEntity 분리 - AuditingConfig 파일 common 모듈 내 공통화(including AuditorAware) - DDL created_by, updated_by type 변경 (varchar(20) > varchar(320), email 최대크기로 설정) --- db/migration/V002__Create_cafe.sql | 4 +-- db/migration/V003__Create_cafe_menu.sql | 4 +-- db/migration/V004__Create_cafe_image.sql | 4 +-- db/migration/V005__Create_menu_option.sql | 4 +-- db/migration/V006__Create_option_detail.sql | 4 +-- db/migration/V008__Create_member.sql | 4 +-- .../common/config/AuditingConfig.kt | 8 ------ .../common/entity/BaseEntityAuditorAware.kt | 12 --------- .../common/config/AuditingConfig.kt | 25 +++++++++++++++++++ .../dongnecafe/common/entity/BaseEntity.kt | 21 ++++++++++++++++ .../common/{ => entity}/BaseTimeEntity.kt | 18 ++++--------- .../dongnecafe/domain/cafe/entity/Cafe.kt | 4 +-- .../domain/cafe/entity/CafeImage.kt | 6 ++--- .../dongnecafe/domain/cafe/entity/CafeMenu.kt | 10 +++++--- .../domain/cafe/entity/MenuOption.kt | 4 +-- .../domain/cafe/entity/OptionDetail.kt | 4 +-- .../dongnecafe/domain/member/entity/Member.kt | 4 +-- .../dongnecafe/security/SecurityExtensions.kt | 15 +++++++++++ .../security/constant/SecurityConstant.kt | 3 +++ .../common/config/AuditingConfig.kt | 8 ------ .../common/config/SecurityConfig.kt | 3 ++- .../common/entity/BaseEntityAuditorAware.kt | 13 ---------- .../filter/JwtAuthenticationFilter.kt | 6 +++++ .../cafe/repository/CafeRepositoryTest.kt | 2 -- 24 files changed, 107 insertions(+), 83 deletions(-) delete mode 100644 dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt delete mode 100644 dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntity.kt rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/{ => entity}/BaseTimeEntity.kt (56%) create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityExtensions.kt delete mode 100644 dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt delete mode 100644 dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt diff --git a/db/migration/V002__Create_cafe.sql b/db/migration/V002__Create_cafe.sql index 5941d25..ca28fcb 100644 --- a/db/migration/V002__Create_cafe.sql +++ b/db/migration/V002__Create_cafe.sql @@ -6,8 +6,8 @@ CREATE TABLE `cafe` ( `total_rate` float NOT NULL COMMENT '카페 종합 평가 점수', `description` varchar(255) COMMENT '카페 상세설명', `created_at` datetime NOT NULL COMMENT '카페 등록날짜', - `created_by` varchar(20) NOT NULL COMMENT '카페 등록자', + `created_by` varchar(320) NOT NULL COMMENT '카페 등록자', `updated_at` datetime NULL COMMENT '카페 변경날짜', - `updated_by` varchar(20) NULL COMMENT '카페 변경자', + `updated_by` varchar(320) NULL COMMENT '카페 변경자', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; \ No newline at end of file diff --git a/db/migration/V003__Create_cafe_menu.sql b/db/migration/V003__Create_cafe_menu.sql index 40d197b..d565291 100644 --- a/db/migration/V003__Create_cafe_menu.sql +++ b/db/migration/V003__Create_cafe_menu.sql @@ -3,9 +3,9 @@ CREATE TABLE `cafe_menu` ( `name` varchar(50) NOT NULL COMMENT '카페 메뉴명', `price` decimal(10, 2) NOT NULL COMMENT '메뉴 가격', `created_at` datetime NOT NULL COMMENT '메뉴 등록날짜', - `created_by` varchar(20) NOT NULL COMMENT '메뉴 등록자', + `created_by` varchar(320) NOT NULL COMMENT '메뉴 등록자', `updated_at` datetime COMMENT '메뉴 변경날짜', - `updated_by` varchar(20) NULL COMMENT '메뉴 변경자', + `updated_by` varchar(320) NULL COMMENT '메뉴 변경자', `cafe_id` bigint unsigned NOT NULL COMMENT '연관된 카페 ID', PRIMARY KEY (`id`), KEY `cafe_id` (`cafe_id`), diff --git a/db/migration/V004__Create_cafe_image.sql b/db/migration/V004__Create_cafe_image.sql index 5f7b229..125a450 100644 --- a/db/migration/V004__Create_cafe_image.sql +++ b/db/migration/V004__Create_cafe_image.sql @@ -2,9 +2,9 @@ CREATE TABLE `cafe_image` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '카페 이미지 ID', `img_url` varchar(255) NOT NULL COMMENT '이미지 경로', `created_at` datetime NOT NULL COMMENT '이미지 등록날짜', - `created_by` varchar(20) NOT NULL COMMENT '이미지 등록자', + `created_by` varchar(320) NOT NULL COMMENT '이미지 등록자', `updated_at` datetime COMMENT '이미지 변경날짜', - `updated_by` varchar(20) NULL COMMENT '이미지 변경자', + `updated_by` varchar(320) NULL COMMENT '이미지 변경자', `cafe_id` bigint unsigned NOT NULL COMMENT '연관된 카페 ID', PRIMARY KEY (`id`), KEY `cafe_id` (`cafe_id`), diff --git a/db/migration/V005__Create_menu_option.sql b/db/migration/V005__Create_menu_option.sql index 7d71d7f..acb0e12 100644 --- a/db/migration/V005__Create_menu_option.sql +++ b/db/migration/V005__Create_menu_option.sql @@ -2,9 +2,9 @@ CREATE TABLE `menu_option`( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '옵션 ID', `title` varchar(50) NOT NULL COMMENT '메뉴 옵션 이름', `created_at` datetime NOT NULL COMMENT '옵션 등록날짜', - `created_by` varchar(20) NOT NULL COMMENT '옵션 등록자', + `created_by` varchar(320) NOT NULL COMMENT '옵션 등록자', `updated_at` datetime COMMENT '옵션 변경날짜', - `updated_by` varchar(20) NULL COMMENT '옵션 변경자', + `updated_by` varchar(320) NULL COMMENT '옵션 변경자', `menu_id` bigint unsigned NOT NULL COMMENT '연관된 카페 메뉴 ID', PRIMARY KEY (`id`), KEY `menu_id` (`menu_id`), diff --git a/db/migration/V006__Create_option_detail.sql b/db/migration/V006__Create_option_detail.sql index f68b2ce..2c226d8 100644 --- a/db/migration/V006__Create_option_detail.sql +++ b/db/migration/V006__Create_option_detail.sql @@ -3,9 +3,9 @@ CREATE TABLE `option_detail` ( `name` varchar(50) NOT NULL COMMENT '옵션 상세명', `extra_price` decimal(10, 2) NOT NULL COMMENT '옵션 추가 요금', `created_at` datetime NOT NULL COMMENT '옵션 상세 등록날짜', - `created_by` varchar(20) NOT NULL COMMENT '옵션 상세 등록자', + `created_by` varchar(320) NOT NULL COMMENT '옵션 상세 등록자', `updated_at` datetime COMMENT '옵션 상세 변경날짜', - `updated_by` varchar(20) NULL COMMENT '옵션 상세 변경자', + `updated_by` varchar(320) NULL COMMENT '옵션 상세 변경자', `option_id` bigint unsigned NOT NULL COMMENT '연관된 옵션 ID', PRIMARY KEY (`id`), KEY `option_id` (`option_id`), diff --git a/db/migration/V008__Create_member.sql b/db/migration/V008__Create_member.sql index e34dd01..1ae5498 100644 --- a/db/migration/V008__Create_member.sql +++ b/db/migration/V008__Create_member.sql @@ -7,8 +7,8 @@ CREATE TABLE `member` ( `role_type` varchar(20) COMMENT '회원 권한', `activated` tinyint NOT NULL COMMENT '계정 활성화 여부', `created_at` datetime NOT NULL COMMENT '회원 등록날짜', - `created_by` varchar(20) NOT NULL COMMENT '회원 등록자', + `created_by` varchar(320) NOT NULL COMMENT '회원 등록자', `updated_at` datetime NULL COMMENT '회원 변경날짜', - `updated_by` varchar(20) NULL COMMENT '회원 변경자', + `updated_by` varchar(320) NULL COMMENT '회원 변경자', PRIMARY KEY (`member_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; \ No newline at end of file diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt deleted file mode 100644 index 9adc473..0000000 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.beaniejoy.dongnecafe.common.config - -import org.springframework.context.annotation.Configuration -import org.springframework.data.jpa.repository.config.EnableJpaAuditing - -@Configuration -@EnableJpaAuditing -class AuditingConfig \ No newline at end of file diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt deleted file mode 100644 index 4d14bb9..0000000 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt +++ /dev/null @@ -1,12 +0,0 @@ -package io.beaniejoy.dongnecafe.common.entity - -import org.springframework.data.domain.AuditorAware -import org.springframework.stereotype.Component -import java.util.* - -@Component -class BaseEntityAuditorAware: AuditorAware { - override fun getCurrentAuditor(): Optional { - return Optional.of("system") - } -} \ No newline at end of file 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 new file mode 100644 index 0000000..735deaf --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt @@ -0,0 +1,25 @@ +package io.beaniejoy.dongnecafe.common.config + +import io.beaniejoy.dongnecafe.security.getAuthPrincipal +import mu.KLogging +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import org.springframework.data.domain.AuditorAware +import org.springframework.data.jpa.repository.config.EnableJpaAuditing +import org.springframework.security.core.context.SecurityContextHolder +import java.util.* + +@Configuration +@EnableJpaAuditing +class AuditingConfig { + companion object: KLogging() { + const val SYSTEM = "system" + } + + @Bean + fun auditorProvider(): AuditorAware { + return AuditorAware { + Optional.of(SecurityContextHolder.getContext().authentication?.getAuthPrincipal() ?: SYSTEM) + } + } +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntity.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntity.kt new file mode 100644 index 0000000..8f899e7 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntity.kt @@ -0,0 +1,21 @@ +package io.beaniejoy.dongnecafe.common.entity + +import org.springframework.data.annotation.CreatedBy +import org.springframework.data.annotation.LastModifiedBy +import org.springframework.data.jpa.domain.support.AuditingEntityListener +import javax.persistence.Column +import javax.persistence.EntityListeners +import javax.persistence.MappedSuperclass + +@MappedSuperclass +@EntityListeners(AuditingEntityListener::class) +abstract class BaseEntity protected constructor() : BaseTimeEntity() { + @CreatedBy + @Column(updatable = false) + lateinit var createdBy: String + protected set + + @LastModifiedBy + lateinit var updatedBy: String + protected set +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/BaseTimeEntity.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseTimeEntity.kt similarity index 56% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/BaseTimeEntity.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseTimeEntity.kt index b5c4ab1..3499ac5 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/BaseTimeEntity.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseTimeEntity.kt @@ -1,11 +1,10 @@ -package io.beaniejoy.dongnecafe.common +package io.beaniejoy.dongnecafe.common.entity -import org.springframework.data.annotation.CreatedBy import org.springframework.data.annotation.CreatedDate -import org.springframework.data.annotation.LastModifiedBy import org.springframework.data.annotation.LastModifiedDate import org.springframework.data.jpa.domain.support.AuditingEntityListener import java.time.LocalDateTime +import javax.persistence.Column import javax.persistence.EntityListeners import javax.persistence.MappedSuperclass @@ -13,18 +12,11 @@ import javax.persistence.MappedSuperclass @EntityListeners(AuditingEntityListener::class) abstract class BaseTimeEntity protected constructor() { @CreatedDate - var createdAt: LocalDateTime = LocalDateTime.now() - protected set - - @CreatedBy - var createdBy: String = "" + @Column(updatable = false) + lateinit var createdAt: LocalDateTime protected set @LastModifiedDate - var updatedAt: LocalDateTime? = null - protected set - - @LastModifiedBy - var updatedBy: String? = null + lateinit var updatedAt: LocalDateTime protected set } \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt index 7196bfe..cf6ac2b 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.domain.cafe.entity -import io.beaniejoy.dongnecafe.common.BaseTimeEntity +import io.beaniejoy.dongnecafe.common.entity.BaseEntity import io.beaniejoy.dongnecafe.domain.cafe.model.request.CafeMenuRegisterRequest import javax.persistence.* @@ -11,7 +11,7 @@ class Cafe protected constructor( address: String, phoneNumber: String, description: String, -) : BaseTimeEntity() { +) : BaseEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "cafe_id", nullable = false) diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeImage.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeImage.kt index 22a0a8c..f05c86f 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeImage.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeImage.kt @@ -1,11 +1,11 @@ package io.beaniejoy.dongnecafe.domain.cafe.entity -import io.beaniejoy.dongnecafe.common.BaseTimeEntity +import io.beaniejoy.dongnecafe.common.entity.BaseEntity import javax.persistence.* @Entity @Table(name = "cafe_image") -class CafeImage( +class CafeImage protected constructor( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "cafe_image_id", nullable = false) @@ -17,4 +17,4 @@ class CafeImage( @ManyToOne @JoinColumn(name = "cafe_id", nullable = false) val cafe: Cafe -) : BaseTimeEntity() \ No newline at end of file +) : BaseEntity() \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt index d2b4bcb..df73a33 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.domain.cafe.entity -import io.beaniejoy.dongnecafe.common.BaseTimeEntity +import io.beaniejoy.dongnecafe.common.entity.BaseEntity import io.beaniejoy.dongnecafe.domain.cafe.model.request.MenuOptionRegisterRequest import java.math.BigDecimal import javax.persistence.* @@ -10,7 +10,7 @@ import javax.persistence.* class CafeMenu protected constructor( name: String, price: BigDecimal, -) : BaseTimeEntity() { +) : BaseEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "cafe_menu_id", nullable = false) @@ -33,7 +33,11 @@ class CafeMenu protected constructor( val menuOptionList: MutableList = arrayListOf() companion object { - fun createCafeMenu(name: String, price: BigDecimal, menuOptionRequestList: List): CafeMenu { + fun createCafeMenu( + name: String, + price: BigDecimal, + menuOptionRequestList: List + ): CafeMenu { val menuOptionEntityList = menuOptionRequestList.map { menuOptionRequestDto -> MenuOption.createMenuOption( title = menuOptionRequestDto.title, diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt index 8072dbd..e89ca3e 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.domain.cafe.entity -import io.beaniejoy.dongnecafe.common.BaseTimeEntity +import io.beaniejoy.dongnecafe.common.entity.BaseEntity import io.beaniejoy.dongnecafe.domain.cafe.model.request.OptionDetailRegisterRequest import javax.persistence.* @@ -8,7 +8,7 @@ import javax.persistence.* @Table(name = "menu_option") class MenuOption protected constructor( title: String -) : BaseTimeEntity() { +) : BaseEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "menu_option_id", nullable = false) diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt index a97c7c4..677fa50 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.domain.cafe.entity -import io.beaniejoy.dongnecafe.common.BaseTimeEntity +import io.beaniejoy.dongnecafe.common.entity.BaseEntity import java.math.BigDecimal import javax.persistence.* @@ -9,7 +9,7 @@ import javax.persistence.* class OptionDetail protected constructor( name: String, extraPrice: BigDecimal -) : BaseTimeEntity() { +) : BaseEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "option_detail_id", nullable = false) diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/entity/Member.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/entity/Member.kt index 4c4f235..d4bb713 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/entity/Member.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/domain/member/entity/Member.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.domain.member.entity -import io.beaniejoy.dongnecafe.common.BaseTimeEntity +import io.beaniejoy.dongnecafe.common.entity.BaseEntity import io.beaniejoy.dongnecafe.domain.member.constant.RoleType import javax.persistence.* @@ -11,7 +11,7 @@ class Member( password: String, address: String, phoneNumber: String -): BaseTimeEntity() { +) : BaseEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id", nullable = false) diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityExtensions.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityExtensions.kt new file mode 100644 index 0000000..9b53630 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityExtensions.kt @@ -0,0 +1,15 @@ +package io.beaniejoy.dongnecafe.security + +import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.ANONYMOUS_USER +import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.ROLE_ANONYMOUS +import org.springframework.security.core.Authentication + +fun Authentication.getAuthPrincipal() : String? { + if (this.isAnonymous()) return null + + return this.principal.toString() +} + +fun Authentication.isAnonymous(): Boolean { + return this.principal == ANONYMOUS_USER || this.authorities.any { it.authority == ROLE_ANONYMOUS } +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt index 4dd62ab..0d6eb28 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt @@ -3,4 +3,7 @@ package io.beaniejoy.dongnecafe.security.constant object SecurityConstant { const val BEARER = "Bearer" const val WHITESPACE = " " + + const val ANONYMOUS_USER = "anonymousUser" + const val ROLE_ANONYMOUS = "ROLE_ANONYMOUS" } \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt deleted file mode 100644 index 9adc473..0000000 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.beaniejoy.dongnecafe.common.config - -import org.springframework.context.annotation.Configuration -import org.springframework.data.jpa.repository.config.EnableJpaAuditing - -@Configuration -@EnableJpaAuditing -class AuditingConfig \ No newline at end of file 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 ced12b6..0efc2c5 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 @@ -21,10 +21,10 @@ class SecurityConfig { @Bean fun filterChain(http: HttpSecurity): SecurityFilterChain { return http + // only api 방식 인증 & 인가 적용 위해 csrf & formLogin 비활성화 .csrf().disable() .formLogin().disable() - // FIXME 임시 permitAll 설정 .authorizeRequests() .anyRequest().authenticated() @@ -43,6 +43,7 @@ class SecurityConfig { .jwtTokenUtils(jwtTokenUtils) } + // Security Filter 미적용 자원 설정 @Bean fun webSecurityCustomizer(): WebSecurityCustomizer { return WebSecurityCustomizer { web -> diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt deleted file mode 100644 index e253520..0000000 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/entity/BaseEntityAuditorAware.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.beaniejoy.dongnecafe.common.entity - -import org.springframework.data.domain.AuditorAware -import org.springframework.stereotype.Component -import java.util.* - -@Component -class BaseEntityAuditorAware: AuditorAware { - override fun getCurrentAuditor(): Optional { - // TODO 추후 사용자 로그인 기능 추가되면 실제 등록한 사용자를 DB에 저장하는 방향으로 수정 - return Optional.of("system") - } -} \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt index 281cd40..21757b1 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt @@ -24,9 +24,11 @@ class JwtAuthenticationFilter( val httpRequest = request as HttpServletRequest log.info { "[JwtAuthenticationFilter][${request.dispatcherType}] uri: ${request.requestURI}" } + // 인증 헤더에 토큰값 없는 경우 pass getAccessToken(httpRequest)?.let { jwtTokenUtils.getAuthentication(it) }?.also { + // 유효한 인증 토큰 존재하는 경우 SecurityContext 토큰값 저장 SecurityContextHolder.getContext().authentication = it log.info { "Valid Access Token [${it.name}]" } } @@ -34,6 +36,10 @@ class JwtAuthenticationFilter( chain.doFilter(request, response) } + /** + * 인증 토큰 획득 + * Authorization : Bearer [AUTH_TOKEN] + */ private fun getAccessToken(request: HttpServletRequest): String? { val bearer = request.getHeader(HttpHeaders.AUTHORIZATION) ?: return null diff --git a/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/repository/CafeRepositoryTest.kt b/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/repository/CafeRepositoryTest.kt index b1c90b2..884abda 100644 --- a/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/repository/CafeRepositoryTest.kt +++ b/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/repository/CafeRepositoryTest.kt @@ -1,7 +1,6 @@ package io.beaniejoy.dongnecafe.domain.cafe.repository import io.beaniejoy.dongnecafe.common.config.AuditingConfig -import io.beaniejoy.dongnecafe.common.entity.BaseEntityAuditorAware import io.beaniejoy.dongnecafe.domain.cafe.entity.Cafe import io.beaniejoy.dongnecafe.domain.cafe.utils.CafeTestUtils import mu.KLogging @@ -17,7 +16,6 @@ import org.springframework.data.repository.findByIdOrNull @DataJpaTest( includeFilters = [ ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = [AuditingConfig::class]), - ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = [BaseEntityAuditorAware::class]) ] ) internal class CafeRepositoryTest {