쿠키 안에 토큰을 저장하고 그것을 받아와서 토큰의 밸류값만 받아오는 과정에 문제가 생겼다.
Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0MSIsImF1dGgiOiJ0ZXN0MSIsImV4cCI6MTcwMjUzNzU2NSwiaWF0IjoxNzAyNTM3NTM1fQ.MgqB-9XQ-jNXxjJOg7VHGXikkIZS6zJPu80OuCQGPTA
이런 식으로 나와야 할 토큰이
Authorization=Bearer%20eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0MSIsImV4cCI6MTcwMjU0MTI3MiwiaWF0IjoxNzAyNTM3NjcyfQ.-IXqThsBKpMNim3Gw0-oiE9ONqqr-3-zUD8MI7Wjyl0; Path=/
이렇게 앞부분의 키값이 같이 나오고 제일 마지막에 ; Path=/ 까지 붙어서 나오게 되었다. 받아오는 로직이 잘못됐을 수도 있지만, 어쨌든 문제의 원인은 키와 밸류가 분리되지 않고 있는 부분이다.
하여
직접 쿠키의 밸류값을 가져오는 코드를 구현했다. 확실한 것은 아니지만 원래라면 프론트 엔드와 함께 작업해야 매끄럽게 해결되는 부분인 것 같았다.
암튼 돌아와서 코드를 읽어보면 쿠키가 null이면 null을 반환하도록 null처리를 했고 null이 아니라면 스트림을 열어 1) 쿠키를 가져와서 2) 키 값으로 쿠키를 찾고 3) 해당 쿠키의 밸류 값을 가져온다. 4) 만약 1)~3)의 과정이 안된다면 null을 반환한다.
방금 작성한 코드로 가져온 쿠키 형식으로 저장된 토큰 밸류값을 다시 변환해주고 앞에 있는 'BEARER ' 을 제거하고 필터단으로 던진다.
requestMatchers 의 역할은 특정 Api 를 어떻게 다룰 것인가 설정하는 역할을 하는데 위와 같은 경우는 .permitAll( ) 을 통하여 모든 접근을 허용한다고 설정을 했다.
그런데 오류를 잡기 위해서 디버그 모드로 실행하던 중 모든 접근을 허용한 Api 임에도 필터로 들어가는 모습을 봤다. 이에 궁금증을 가지고 찾아보니,
라는 현재의 결론을 얻었다.
즉 많은 필터들이 체이닝 된 형태로 이뤄져있는 SpringSecurity 에서 requestMatchers @@@ .permitAll( ) 은 일단 필터단으로 들어가서 체이닝 된 필터들을 거치다가 인증 처리하는 필터에서 '어? 너 permitAll( ) 처리받았네? 오키 패스' 하고 빠져나오는 형태인 것 같다.
[TIL#29] 가을에 시작한 Spring <시간을 (Timestamp, LocalDateTime) Json 으로 request, response 하기> (2) | 2024.01.03 |
---|---|
[TIL#25-1] 가을에 시작한 Spring <PLUS 복습> (0) | 2023.12.15 |
[TIL#24] 가을에 시작한 Spring <Transactional / FetchType.LAZY or EAGER / cascade> (0) | 2023.12.12 |
[TIL#23] 가을에 시작한 Spring <IoC/DI> (0) | 2023.11.28 |
[TIL#21] 가을에 시작한 Spring <ERD 작성> (0) | 2023.11.16 |