회고

TIL_210720

코동이 2021. 7. 21. 08:30

1. Facts(사실, 객관)

- spring security 강의

- javascript 제로초 렛츠기릿 자바스크립트 쿵쿵따 코드구현

2. Feelings(느낌, 주관)

- 회사에서 일반적인 코딩으로 되어있는 부분을 시큐리티로 개선하기 위한 많은 공부를 하고 있습니다. 시큐리티는 처음에 spring boot에서 JWT를 이용한 방법을 공부했었는데, 그때는 API로 만드는 연습을 했기 때문입니다. 하지만 회사 프로젝트는 현재 프런트가 JSP입니다. 그래서 자료는 정말 차고 넘칩니다. 직접 구매한 스프링 프로젝트 관련 책과 시큐리티 책을 통해서 열심히 공부중에 있습니다. 시큐리티 설정으로 인증, 인가, 세션처리를 한번에 하려고 합니다.

 

- javascript의 기본 구현부터 차근차근히 배워가려고 합니다. 스터디는 정말 효과적입니다. 강제성과 목표 때문에 어서 빨리 끝낼생각을 하고 있습니다. 이것을 통해 다른 제자를 가르치면서 어려움과 힘든것을 해결해주며 같이 성장하고자 합니다.

 

- 시큐리티 강의를 들었습니다. 분명 5개월 전에 개념을 들었을 떄, 하나도 이해가 안됐는데, 오늘 들었을때는 너무나도 재미있었습니다. 아무래도 시큐리티를 어느정도 공부하고 다시 이론적인 부분을 보니 훨씬 이해가 빠른듯 합니다.

 

3. Findings (배운 점)

 

- security설정 이후, 권한이 없는 페이지 이동 시 throw new AccessDeniedException()을 던지면 알아서 로그인 페이지로 이동했던 기억이 있습니다. 그때는 그냥 그렇게 나왔기에 왜 그런지 이유를 몰랐지만 이 강의를 통해 알았습니다.

 

 security는 내부적으로 인증오류처리와 인가오류처리가 있습니다. 중요한 것은, 아무 security와 관련해서 AccessDniedException()에서 true를 반환하면 anonymous()상태를 검사해서 true인 경우 인증예외핸들러로 넘어가고, false인 경우 인가예외핸들러로 넘어갑니다. 아무로그인도 하지 않은 상태는 anonymous()이기에, 인증예외핸들러로 넘어가고 다시 로그인창으로 가도록 되어있습니다.

 

 반면 예를들어, ADMIN 권한이 필요한 작업에서 내가 USER 권한으로 접근하면, 이미 로그인은 되어있기 때문이 인가처리로 넘어갑니다. 그 때 보통 다시한번 접근권한이 없다는 상황을 리턴합니다

 

 AccessDeniedException의 처음 if문에서는 isAnonymous를 검사하고 인증예외를 발생합니다.

아래 else문에서 디버그 출력문에 (user is not anonymous) 라는 문구에서 볼 수 있다시피, 로그인이 되어있지만 해당 권한이 없는 경우에는 인가예외를 발생합니다.

 

 또한 로그인을 성공하고나서 이전페이지로 돌아갈 수 있습니다. 그렇기위해 로그인페이지로 들어왔을 때, referrrer 헤더에 이전 페이지 주소에 대한 정보를 기억하도록 하거나 RequestCache와 SavedRequest를 통해 이전 페이지에대한 정보를 저장하고 리턴할 수 있습니다. 강의에서 선택한 후자 방법은 아래 사진과 같으며 시큐리티 설정에서 성공핸들러를 만들어두면 별도의 설정없이도 이용이 가능합니다.

 

* 제로초님 강의를 들으면서 간단히 정리 및 쪽지문제 작성

https://www.notion.so/2-1-e331b55f1a194eb995351725d5beb5d5

https://www.notion.so/2-2-97f7662321cb400dbde9d843809f84b2

반응형