spring security를 이용해서 api 서버를 간단하게 만드는 토이 프로젝트를 진행하다가, 뭔가 거슬리는 것이 있어서 몇 가지 설정을 off 한 게 있었는데요. csrf도 그 중 하나였습니다. 3회 코딩테스트를 출제하느라 얼레벌레 넘어간 감이 있었는데요. 문득 생각이 난 김에 몇 편 정도 써 보려고 합니다. 혹여나 이상한 부분이 있다면, 댓글을 남겨주시면 감사하겠습니다. 먼저, spring security + spring web 디펜던시만 추가하고 아무것도 추가하지 않은 서버를 돌리면, 요런 로그인 페이지가 하나 뜨게 됩니다. 페이지 소스를 보겠습니다. 보면 _csrf라고 hidden type이 하나 뜨게 되는데요. csrfFilter 클래스에서 doFilterInternal 메서드에 브레이크 포..
spring 검색 결과
logback의 MDC에 대해서 문서를 보면서 공부하고 있습니다. 내부적으로 ThreadLocal을 이용을 한다는 것을 질문 답변 글에서 확인하였고, 그것 때문에 이 부분에 대해서도 공부를 하게 되었어요. 저는, 최근에 토이 프로젝트에서 요청을 날린 client의 ip를 로그에 추가하도록 바꾸었는데요. 이 과정에서 MDC를 이용하게 되었어요. 제 logback은 1.2.9 버전을 쓰고 있습니다. logback-spring.xml에서 encoder의 pattern을 %X{AAA} - %msg%n 이렇게 설정을 하였습니다. 여기서 제가 궁금했던 것은 %X라는 친구가 어떤 식으로 내부적으로 동작을 해서, MDC에 있는 것을 읽어오느냐는 것이였습니다. 이 %X는 MDC에서 AAA를 key값으로 가지는 value..
저번에 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 내부에 있는 키들을 모두 순회해서 값들을 가..
최근댓글