본문 바로가기
프로젝트/Recipository

[Dev] 22.11.22 로그인 과정에서 마주한 문제

by 규글 2022. 11. 22.

마주한 문제

 로그인을 하고 root page로 redirect 되는 것이 아니라 /error 로 이동하게 되었다. 그런데 이상한 점은 따로 root page로 이동해보면 로그인에는 성공했다는 것을 확인할 수 있었다. 즉, 로그인은 정상적으로 수행되지만 어떤 문제가 발생해서 Request 객체에 requestURI 정보가 /error 로 들어가기때문에 설정한 root page가 아니라 /error 로 이동한다는 것을 의미한다고 할 수 있겠다.

 

 검색을 통해서 여러 강의 사이트의 질문 게시판이나 기타 블로그는 공통적으로 하나의 stackoverflow 페이지[각주:1] 를 언급하고 있었다. 만약 우리말로 되어있는 유사한 설명을 확인하고 싶다면 다음 페이지[각주:2] 를 확인한다.

 

 해당 게시글에서 답변자는 위와 같이 언급했다. 읽어보면 Spring에서 페이지에 사용된 static resource를 찾지 못해서 발생하는 오류로, status 404를 return 하는 것 대신에 /error 페이지로 가도록 되어 있다는 말이다. 하지만 /error 페이지에 대한 request는 인증되지 않은 요청이기에 deny 되고, 해당 요청은 session에 저장되어서 다른 곳으로 redirect 한 뒤 로그인에 성공하더라도 session에 /error 정보가 저장되어 있기때문에 발생하는 것이라고 말한다.

 

 답변자는 이어서 다음의 두 가지 방법을 solution으로 제시했다.

  • Security Configuration에서 /error 페이지를 Ignore 한다.
  • Spring Boot의 autoconfig를 Ignore 한다.
web.ignoring().antMatchers("/favicon.ico", "/resources/**", "/error");

 첫 번째 방법은 WebSecurityConfigurerAdapter 를 extends 한 SecurityConfig 의 WebSecurity에 대한 configure에서 "/error" 에 대한 ignoring을 추가하는 것이다.

 

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

 두 번째 방법은 application.properties에 위와 같이 작성해서 auto configuration을 ignoring 하는 것이다. 하지만 이 방법은 ErrorMvcAutoConfiguration

의 몇가지 bean 들을 disabled 하므로 사용에 주의해야한다고 언급했다.

 

 필자는 첫 번째 방식을 통해 해당 solution이 동작하는 것을 확인하기는 했으나, 근본적인 해결책이라고 생각하지 않고 계속해서 다른 해결책을 찾으려고 했다. 왜냐하면 필자의 경우 페이지에 로딩하는 css나 image 등이 정상적으로 로딩되고 있었기 때문이다.

 

 

상황 파악

 사실 해당 문제는 처음에 발생하지 않았다가 휴식 후 다시 작업을 이어나가려고 했을 때 발견하게 되었다. 그래서 로그인 요청에 대한 처리가 어떻게 되는지 알아보고자 debugging 했으나, 단순히 중간에 /error request를 하고 있다는 것을 알게 되었을 뿐 명확한 이유를 알 수는 없었다.

 

 그러던 중 browser의 검사(inspect), 즉 개발자 도구를 연 상태로 로그인을 요청할 경우에 /error 페이지로의 요청이 발생하는 것을 알게 되었다. 반대로 개발자 도구를 열지 않은 상태로 요청할 경우는 /error 페이지로 이동하지 않고 정상적으로 defaultSuccessUrl 에 설정한대로 이동하는 것까지도 확인하였다. 과연 어떤 이유로 문제가 발생한 것일까?

 

 

@EnableWebSecurity(debug = true) 를 SecurityConfig 에 작성해서 보게 된 console에서 확인한 내용은 바로 bootstrap css file에 대한 map file에 대한 요청을 하고 있었다는 것이다. 해당 file은 필자기 html 에 포함시킨 내용이 아니었고, css file에 대한 link도 정상적으로 동작하고 있었다.

 

DevTools failed to load source map: Could not parse content for http://localhost:8080/lib/css/bootstrap.css.map: Unexpected token '<', "<!DOCTYPE "... is not valid JSON

 개발자 도구를 열었을 때 위와 같은 메시지는 이미 확인했다. Css file은 정상적으로 동작하고 있었기때문에 단순히 source map 이 load 되지 않았다는 단순한 경고라고 생각했다. 하지만 그것이 아니었다.

 

 

Solution

 필자는 다시 bootstrap 페이지에서 css.map file을 다운로드 하여 css file이 있는 곳에 위치시켰다. 따로 html 에 link 로 추가해주지는 않았고, 단순히 위치시킨 것으로 위 경고 메시지를 없애는 것과 동시에 개발자 도구를 열어둔 상태로도 정상적으로 로그인이 진행되는 것을 확인했다.

 

 Mapping file이 꼭 필요하다는 것을 미리 인지했거나, 조금 더 자세히 console에서 해당 file을 요청하는 것을 발견했다면 오랜 기간 고민하고 이상한 곳을 추적할 필요 없었을텐데 아쉬운 마음이다.

댓글