spring security를 이용해서 api 서버를 간단하게 만드는 토이 프로젝트를 진행하다가, 뭔가 거슬리는 것이 있어서 몇 가지 설정을 off 한 게 있었는데요. csrf도 그 중 하나였습니다. 3회 코딩테스트를 출제하느라 얼레벌레 넘어간 감이 있었는데요. 문득 생각이 난 김에 몇 편 정도 써 보려고 합니다. 혹여나 이상한 부분이 있다면, 댓글을 남겨주시면 감사하겠습니다. 먼저, spring security + spring web 디펜던시만 추가하고 아무것도 추가하지 않은 서버를 돌리면, 요런 로그인 페이지가 하나 뜨게 됩니다. 페이지 소스를 보겠습니다. 보면 _csrf라고 hidden type이 하나 뜨게 되는데요. csrfFilter 클래스에서 doFilterInternal 메서드에 브레이크 포..
웹/스프링부트 검색 결과
저번에 controller에서 UserLoginInfo로 들어오는 정보를 User로 convert 해서 서비스 단에 보내는 로직을 작성하였습니다. 이것을다른 데서 하게 하면 어떨까요? mapping을 손쉽게 하기 위해서 mapstruct를 이용했는데요. 문제는 비밀 번호가 담겨진 것은 가입 로직에서는 encoding 해서 service 단에 넘겨야 한다는 것입니다. 그 전에, 가입과 로그인 로직부터 간단하게 도식화 해서 그려보겠습니다. 먼저 가입 로직이에요. userName과 Email, password를 json 형식으로 받으면 패스워드만 bcrypt로 암호화를 해요. 나머지 필드인 userName과 Email은 User 객체를 생성할 때 그대로 넣고요. 그 다음에 User 객체를 service lay..
안녕하세요. 오랫만입니다. 토이 프로젝트를 하다가 controller에서 mapping하는 로직이 있었습니다. 예를 들어, bookController에 있는 addBook 메서드를 보겠습니다. BookRegInfo 객체를 받아서, Book 객체에 넘겨 받은 객체에 대한 정보를 넣습니다. 그리고 이 객체를 service 단으로 넘겨 버립니다. 사실 이게 끝이긴 합니다. 그런데, 만약에 book의 필드가 많아지면 어떨까요? 컨트롤러 안의 addBook에서 mapping을 하는 로직을 어떻게 뺄지 고민을 했어요. 혹은, 이러한 일련의 작업들을 쉽게 해 주는 것이 없나? 도 찾아보았어요. 찾아보니 mapstruct가 있었는데요. 이번 시간에는 이 친구에 대해 간단하게 알아 보겠습니다. mapstruct와 map..
RequestBody에 대해서 Validation이 실패했을 때 custom한 error를 떨어트리는 것을 하였습니다. 그런데, 쿼리 파라미터라던지, path variable에 대해서 Validation을 처리하지는 못합니다. 이것을 처리하기 위해서는 ConstrainViolationException을 컨트롤러 advice에서 처리해 주어야 합니다. ContraintViolationException이 떨어졌을 때, custom message를 어떻게 떨굴지 보도록 하겠습니다. 먼저, e에 contraintViolations가 있습니다. HashSet이 있는데요. 이 안에 ConstraintViolationImple가 들어가 있음을 볼 수 있어요. HashSet 내부에 있는 키들을 모두 순회해서 값들을 가..
안녕하세요. 토이 프로젝트를 진행하다가 jwtFilter에서 예외가 발생했을 때, ControllerAdvice로 처리를 했습니다. 그랬더니 500이 떨어졌는데요. 서버에서의 로그를 확인해 보니 jwt의 사용 기한이 경과되었다와 같은 jwt exception이 그대로 떨어졌습니다. 저는, jwt token이 유효하지 않다면, fe단에서 왜 유효하지 않은지 알 수 있게 custom한 메세지와 응답 코드를 뿌려주려고 했습니다. 어떤 식으로 적용을 했는지 간단하게 소개해 보도록 하겠습니다. 공식 문서를 보면 Spring Security에서 Filter에 대한 개략적인 그림이 있어요. 이 그림과 서버에 나타난 로그를 보고 어떻게 코드를 바꿔야 할 지 고민해 보겠습니다. 먼저 GET /borrow는 인증이 되어야..
최근댓글