- 23.11.16) TIL - 스프링 숙련 주차 8일차2023년 11월 16일 20시 33분 10초에 업로드 된 글입니다.작성자: oneseel
어제에 이어 개인 프로젝트 진행.
오늘 진행한 것
- 로그인 security 구현
- todo entity와 user entity 연관관계
- 기존 API 수정
1. 로그인 Security 구현
- WebSecurityConfig, JwtAuthenticationFilter, JwtAuthorizationFilter 클래스는 코드 스니펫을 복사해서 사용했다.
- 아직 충분히 이해되지 않아서 여기에 무언가 설명하기가 어렵다. 큰 흐름을 알겠는데 세세히 이해하지는 못했다.
https://github.com/oneseel/todo/tree/master/src/main/java/com/sparta/todo/jwt
2. todo entity와 user entity 연관관계
- 1명의 user는 여러 개의 todo를 가진다. todo를 주인 entity로 하고 user를 상대 entity로 놓으면 다 대 일의 관계가 된다.
- todo entity는 아래와 같은 코드를 추가했다.
@ManyToOne @JoinColumn(name = "user_id", nullable = false) private User user;
- user entity는 아래와 같은 코드를 추가했다. (cascade는 영속성 전이로 user에서 수행한 작업이 todo entity에도 동일하게 전파된다)
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private List<Todo> todos;
- comment entity가 추가되면 최종적으로 아래의 ERD처럼 구성될 것이다.
https://www.erdcloud.com/d/3yT3gvHWqe3Nyfm28
3. 기존 API 수정
- 아래의 메서드를 추가했다.
- 윗부분은 Spring Security에서 현재 인증된 사용자의 정보를 가져오는 코드이고, 아래는 현재 로그인한 사용자를 userRepository에서 가져오는 코드이다.
- 이게 필요한 할일 작성, 수정, 삭제에 추가했다. (아마도 댓글 작성, 수정, 삭제에도 추가 될 것 같다.)
private User getUser() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String username = authentication.getName(); // 현재 로그인한 사용자의 정보를 가져오기 User user = userRepository.findByUsername(username) .orElseThrow(() -> new IllegalArgumentException("현재 로그인한 사용자를 찾을 수 없습니다.")); return user;
일단 오늘은 가장 큰 산이었던 spring security를 어찌저찌 구현했다.
내일은 완료여부기능과 댓글기능을 추가할 예정이다.
'TIL' 카테고리의 다른 글
23.11.22) TIL - 뉴스피드 프로젝트 1일차 (0) 2023.11.22 23.11.17) TIL - 숙련 주차 7일차 (0) 2023.11.17 23.11.15) TIL - 스프링 숙련 주차 7일차 (0) 2023.11.15 23.11.14) TIL - 스프링 숙련주차 6일차 (1) 2023.11.14 23.11.13) TIL - 스프링 숙련주차 5일차 (1) 2023.11.13 댓글