Cooper's devlog

5-4. 수정/삭제 기능에 대한 보안 처리 및 LocalDateTime 설정 본문

Programming/Spring-boot

5-4. 수정/삭제 기능에 대한 보안 처리 및 LocalDateTime 설정

cooper_dev 2020. 7. 22. 21:31

1. 강의 링크

https://www.youtube.com/watch?v=UMEmYw7EJ7g&list=PLqaSEyuwXkSppQAjwjXZgKkjWbFoUdNXC&index=43

 


2. 학습 목표

1. 수정 기능 구현

2. 삭제 기능 구현

3. 보안 처리

4. LocalDateTime 설정

 


3. 과정

1. 예외 처리를 이용 타인 수정/삭제 기능 방지

  • 기존 구현의 결함 : 타인의 수정/삭제 가능 여부

  • 진행 구현 방식 : 타인 수정/삭제 기능 방지 코드 작성

(1) updateForm(questionController) 수정

updateForm method(questionController)

  • 조건문1 : LoginUser session 일치 여부 확인
  • 조건문2 : question 작성자와 일치 여부 확인

 

(※팁! : model.model.addAttribute("question", questionquestionRepository.findById(id).get()); 부분 드래그 마우스 우클릭 → source → extract local variable클릭 시, 지역 변수 형태로 자동 생성(refactoring) 기능)

 

 

 

(2) delete(questionController) 수정

delete method(questionController)

  • 조건문1 : LoginUser의 session 일치 여부 확인
  • 조건문2 : question의 작성자와 일치 여부 확인

 


2. isSameWriter 내용 구현 (Question)

 

(1) isSameWriter 구현

isSameWriter method

  • isSameWriter : question 객체 내에서 method 구현으로 get&set method 최소화(refactoring)

 

 

(2) equals override

  • eqauls : 두 인스턴스가 같은지를 확인하는 메소드.
  • (객체는 기본적으로 다르기 때문에 객체를 비교하면 무조건 false)
  • equals overriding객체 안의 값이 같으면 같은 객체로 인식하도록 하도록 재정의.
  • (참고 ref : https://meaownworld.tistory.com/80)

(※중요! : 마우스 우클릭 → source → Generate hashCode() & equals클릭 일치 여부 필드 값 지정 후, 확인)

 


3. create_time(question table) date type 변경 : binary → timestamp

  • 기본적인 data type이 binary로 설정되어 timestamp으로 변경해주고자 한다.
  • (springboot 2.1.5 ver부터 timestamp로 자동으로 설정되어 테이블 설정해주고 있다.)

(1) net.slipp / LocalDateTimeConverter.class 생성

 

 

(2) LocaldateTimeConverter를 AttributeConverter.inteface를 implements 받아 Override 

  • springboot가 converter부분 인식 : localdatetime일 때, timestamp로 변경해주는 기능을 한다.

 

(3) 변경 사항 확인(http://localhost:XXXX/h2-console/)

 


Comments