5월 1주차 회고
생존 신고를 위한 블로그 글 쓰기.. 5월 첫째주!
업무
저번에 jwt 발급 하는 것을 작성했으니, 이번에는 모바일 어플리케이션에서 jwt 를 이용해 인증처리를 진행하도록 코드를 변경했다(기존에는 session 방식을 이용함)
import java.util.Collection;
import lombok.Getter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;
@Getter
public class CustomUser extends User {
private final String name;
public CustomUser(String username, String password,
Collection<? extends GrantedAuthority> authorities, String name) {
super(username, password, authorities);
this.name = name;
}
}
위와 같은 식으로 작성하고, builder 을 사용해 User 객체를 사용하려고 했는데 상속관계여서 어려웠다
기존에는 session 방식을 사용했으니까 로그인하면 암호화한 시퀀스 정보, 개인정보 등을 프론트엔드에 전달해줬었는데 accessToken을 이용하니 그럴 필요가 별로 없어졌다 생각하여 엔드포인트 전체를 변경했다 (프론트는 이제 시퀀스 정보 등에 대해 알 필요가 없다)
일단 accessToken을 받아서 무조건 파싱작업이 한번은 이뤄지기 때문에 개인정보가 User principal에는 무조건 있는 셈!
@GetMapping("/search")
@PreAuthorize("hasAnyRole('ROLE_TEST')")
public Mono<ResponseEntity<ResponseDto<PageImpl<TestDto>>>> searchList(@ModelAttribute TestRequest testRequest, Authentication authentication) {
CustomUser principal = (CustomUser) authentication.getPrincipal();
String name = principal.getName();
… 이하 생략
}
그리고 최초 로그인 시 필요한 정보는 로그인 서버에서 토큰을 발행하는 것과는 별도로 보내줘야 하기 때문에 토큰 발행 후 바로 필요한 정보를 보내주는 endpoint를 만들어 전달했다
물론 프론트엔드에서 accessToken 을 파싱해서 써도 되지 않느냐..? 라고 할 수 있지만 보안상 권장되지 않는다 하여 이 방식으로 가기로 했다
custom exception 처리하기
- custom exception 을 처리하는 작업을 진행중이었는데, 다른 사람이 작성해 놓은 것을 슬쩍 포팅중에 있다
- 일단 DefaultErrorAttributes 를 상속하여 짜고 있는데 챗지피티놈이 globalExceptionHandler를 쓰라고 강력히 주장중에 있다
- 그래서 진행하고 나서 수정할 수 있다면 하려고 한다
- 하면서 httpStatusCode 에 대해 많이 알게 됐다
- teapot 이라는 code 도 있어서 신기했는데 만우절을 기점으로 생겼다고 한다
Mongo 관련 쿼리 작업 도와주기
기존에 mongoDB 에서 값을 불러올 때 List
T 값이 계속 다른 class 값을 받아와야 하는 경우가 있어서 쿼리를 reflaction을 써서 프로그램으로 작성해 aggregation, match에 집어넣어 받아왔었다
이것을 다른 곳에서도 사용할 일이 있어 동기분께 알려드렸는데 진행하면서 기존 코드에 대한 부족한 부분 피드백도 듣고 칭찬도 들어서 좋았다
mobile 을 java 17에 spring 3.0.2로 짰는데 기존에 java 11을 쓰는 서버에 띄울것인지라 도커 위에 얹어서 띄워야 할 듯 하여 슬쩍 테스트 해보려고 한다(물론 이사님이 해주실 수도 있지만..)
개인적