본문 바로가기
Spring/게시판 CRUD + 추가기능들

게시글 작성시 회원 정보 게시글에 자동 포함시키기

by chogigang 2023. 4. 13.

게시글을 작성할때 수정권한 등등을 확인하기 위해 게시글 작성시 member_id 가 와야합니다.

 

저는 아직 JPA,스프링 시큐리티 숙련도가 너무 부족해서 AuditConfig 사용할겁니다.

 

물론 AuditConfig 사용해서 중복이 없는 member_id  를 받아올수 있지만 저는 아직 숙련도가 부족해

 

이메일을 받아 올생각입니다.

 

AuditorAwareImpl

package cho.boardplus.confing;

import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.Optional;

public class AuditorAwareImpl implements AuditorAware<String> {
    @Override
    public Optional<String> getCurrentAuditor() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        String userId = "";
        if (authentication != null) {
            userId = authentication.getName();
        }
        return Optional.of(userId);
    }
    
}
  1. getCurrentAuditor() 메소드는 AuditorAware 인터페이스에서 정의된 메소드로, 현재 로그인한 사용자의 ID를 반환하는 역할을 합니다.
  2. Authentication 객체는 Spring Security에서 인증된 사용자 정보를 담고 있는 객체입니다. SecurityContextHolder.getContext().getAuthentication()은 현재 요청에 대한 Authentication 객체를 반환합니다. getName() 메소드는 Authentication 객체에서 현재 사용자의 이름을 반환합니다. 따라서 위 코드에서는 현재 로그인한 사용자의 ID를 구하기 위해 Authentication 객체에서 이름을 가져와서 userId 변수에 저장하고, 이를 Optional 객체에 담아 반환합니다.

 

 

AuditConfig

package cho.boardplus.confing;

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;

@Configuration
@EnableJpaAuditing
public class AuditConfig {

    @Bean
        public AuditorAware<String> auditorAware(){

    return new AuditorAwareImpl();

    }

}

 

  1. 스프링 데이터 JPA에서 사용하는 JPA Auditing을 구성하기 위한 설정 클래스입니다.
  2. @Configuration 어노테이션은 이 클래스가 스프링의 구성 설정임을 나타내고, @EnableJpaAuditing 어노테이션은 JPA Auditing을 사용하도록 활성화합니다.
  3. @Bean 어노테이션은 auditorAware()라는 메서드를 생성하고 AuditorAwareImpl 클래스의 인스턴스를 반환합니다. 이 클래스는 AuditorAware 인터페이스를 구현하고, 스프링 시큐리티에서 현재 사용자의 인증 정보를 가져와 createdBy와 modifiedBy 필드에 설정합니다.
  4. AuditConfig 클래스는 스프링 데이터 JPA에서 JPA Auditing을 사용하기 위한 설정 클래스로, createdBy와 modifiedBy 필드에 사용자 정보를 저장하기 위한 AuditorAwareImpl 클래스의 인스턴스를 반환하는 Bean을 생성합니다.

 

이제 Entity 도 약간 변화가 필요합니다.

 

 

BeseEntity

package cho.boardplus.entity;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
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;
import java.time.LocalDateTime;

@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Getter
@Setter
//시간 정보를  다루는 엔티티
public abstract class BaseEntity  {


    @CreatedBy
    @Column(updatable = false)
    private String createdBy; //작성시 회원 아이디 자동 체크

    @LastModifiedBy
    private String modifiedBy; // 수정시 회원 아이디 자동 체크


    @CreationTimestamp //생성했을때 시간 체크
    @Column(updatable = false) //수정시때는 발동하지 않는 옵션
    private LocalDateTime createdTime;

    @UpdateTimestamp //수정이 발생했을때 시간 체크
    @Column(insertable = false) //인설트를 할때는 관여를 안한다.
    private LocalDateTime updatedTime;


}

 

추상 클래스로 변경하고  createdBy   , modifiedBy 를 추가합니다. 이전에 다른 Entity들은 다 BeseEntity를 상속받았습니다.

public class BoardEntity  extends BaseEntity {
public class Member extends BaseEntity {

 

 

이제 게시글을 작성 하고 DB 를 확인 해보면 됩니다.

 

 

다시 한번 말하지만 중복이 없는 member_id 값을 created_by에 넣을수 있습니다. 제가 숙련도가 부족해서 일단은 이렇게 하고 넘어가는겁니다. AuditConfig 설정을 건들여서 수정하실수 있으면 수정하시고 진행하셔도 됍니다.

 

member_id 테이블을 연관맵핑을 하면서 시도했지만 저는 결국 실패해서 이렇게 합니다.

 

 

 

'Spring > 게시판 CRUD + 추가기능들' 카테고리의 다른 글

게시판 권한 부여  (0) 2023.04.04
로그인 구현  (0) 2023.04.03
회원가입 기능 구현  (0) 2023.04.01
게시글 페이징  (0) 2023.03.30
게시판 삭제  (0) 2023.03.29