티스토리 뷰
스프링 시큐리티를 적용하고나서부터
로그인을 하지 않은 anonymousUser일때 계속해서 login 요청이 날라가는 문제가 생겼다.
정확히는 http://localhost:8080/null로 먼저 요청이 날라가고 그 이후에 내가 설정해둔 로그인 페이지인 http://localhost:8080/auth/login으로 redirect 되는 것이다 (하지만 redirect가 되지는 않음)
그래서 어떤 페이지를 들어가려고 하든 로그인 요청이 한번씩 꼭 날라갔고 로그인 페이지를 요청하면 로그인 요청을 2번씩 하는 문제가 발생하였다.
이 문제가 그냥 사용하는데에 있어 어떤 문제를 발생시키는건 아니었지만 항상 정상적인 요청 이후에 null 요청이 한 번 더 날라갔기때문에 스프링 시큐리티에서 기억하는 "SPRING_SECURITY_SAVED_REQUEST"가 언제나 null인 문제가 발생했다.
즉 스프링 시큐리티가 알아서 기억해주는 로그인 필터로 인터셉트 되기 전의 페이지가 항상 null이었기 때문에 로그인 이후에 세션 유지를 할 수가 없었다!!
몇날 며칠 동안 영어로 한국어로 수십군데를 뒤져가며 방법을 찾아보았으나 어느 누구도 나와 똑같은 문제를 겪은 사람이 없었다...
시도해본 것들
1. favicon의 href가 #으로 되어있으면 GET 요청이 2번 날라갈 수 있다고해서 모든 favicon을 찾아서 href를 바꿔도 보았지만 소용이 없었음
(만약 #으로 해두었다면 밑에 내용을 적용해보라.)
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
favicon은 쿠키로 저장되어서 그 문제때문일 수도 있다고 생각이 들어 브라우저의 모든 쿠키도 밀어보았으나 의미없었음
2. 로그인이 성공하고 나서 핸들링하는 LoginSuccessHandler의 로직을 수도없이 바꿔봄
인터넷에 존재하는 모든 로직은 다 적용해봤을듯싶다.. 하지만 아무런 효과 없었음
3. login의 GET 요청을 받는 Controller에서 session에 값을 담아보기도 함 여전히 소용없음
4.HttpRequestCache를 Bean으로 등록해서 사용해봄 의미없음..
기타 등등..
네트워크에서 null 요청을 하는 것이 문제라는걸 알게 됨
서버단에서 계속 시도해보다가 아무런 진전이 없자 프론트단의 문제가 아닐까? 라는 생각을 하게 되었고
개발자 도구를 열어서 네트워크를 째려보니까 네트워크 요청 거의 마지막즈음에 null을 요청하고 login로 redirect 되는 것이었다!
왜 null을 요청하는지 근본적인 원인을 알고싶었지만 아무리 구글링을 해도 정보를 얻을 수 없었다.
해결 방법
그러다가 '어..? null을 요청하고 login로 redirect??'라는 생각이 들어
밑의 코드를 적용하고나니 너무 허무할 정도로 문제가 해결되었다 (임시적이지만)
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
...
.authorizeRequests()
.antMatchers( "/auth/null", "/null").permitAll()
...
(/auth/null은 필자에게만 발생하는 문제일 것이다)
그냥 간단하게 null 요청을 permitAll해서 login 요청이 가지 않게 해주는 것이었다.
여전히 null 요청이 뜨긴 하지만 이제는 Redirect인 302 에러가 아닌 404 에러가 뜨고 어떠한 로그인 처리 로직이 발생되지 않음!!
그 이후에 loginSuccessHandler도 정상적으로 작동하며 로그인 납치당한 이후에도 세션이 정상적으로 유지되었다.
문제를 임시적으로 해결한 지금도 왜 null을 요청하는지는 도저히 모르겠다. 아마 수많은 cdn으로 떡칠된 프론트 중의 어떤 문제가 아닐까 추측 중이다..
구글 등 어떤 사이트를 가서 봐도 항상 404 null 에러가 발생하긴 하는데 원인이 너무 궁금하다
'트러블슈팅' 카테고리의 다른 글
- Total
- Today
- Yesterday
- lunarvim
- neovim
- 루나빔
- RequestPart
- RequestParam
- RequestBody
- JavaScript
- vim
- 레디스
- 도커
- 아키텍처
- 배포
- Dap
- ModelAttribute
- IDE
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |