TIL - 22.12.27

자라나는 ㅇㅅㅇ개발자·2022년 12월 27일
0

TIL

목록 보기
41/126

오늘 스프링 심화 강의를 들으며 강의 프로젝트를 따라하던 도중 완성을 하고 실행을 해보았는데 웹페이지에서 회원가입을 하고 로그인을 하고나니
원래는 이렇게 나와야할 메인화면에

갑자기 login.html의 코드들이 나타났다.

다른 것도 아니고 갑자기 html 형식이 메인 페이지 맨 위에 올라와서 다른건 클릭도 안되었다.
내가 했던건 코드스니펫을 복사하고 붙여넣기 했던 것 뿐인데 오류도 아니고 처음보는 현상이 일어나니 구글링도 해볼 수 없고, 일단은 CSS와 html, js의 코드들도 전부 다시 복붙해보았지만 바뀌는 것은 없었다.

하는 수 없이 고수를 찾아가 도움을 요청했고, 코드들 중간중간에

...
System.out.println("어디가문제냐");
...

코드를 넣어가며 어디까지 코드가 호출되는지 확인을 해보았더니
원인은 WebSecurityConfig 클래스에 있었다.

문제가 되었던 코드는

        http.authorizeRequests().antMatchers("/api/user/**").permitAll()
                .antMatchers("/api/search").permitAll()
                .antMatchers("/api/shop").permitAll()
                .anyRequest().authenticated()
                // JWT 인증/인가를 사용하기 위한 설정
                .and().addFilterBefore(new JwtAuthFilter(jwtUtil), UsernamePasswordAuthenticationFilter.class);

여기에서 가장 밑에 'JWT 인증/인가를 사용하기 위한 설정' 이 한 줄이 빠져있었는데
강의 중간에 코드스니펫을 여기저기서 복붙하다보니 헷갈려서 코드를 빼먹었던 것이었다...

.and().addFilterBefore(new JwtAuthFilter(jwtUtil), UsernamePasswordAuthenticationFilter.class);

클라이언트에서 입력받은 정보를 controller로 넘겨주기 전에 Spring Security에서 FilterChain을 거쳐 인증/인가를 진행하고, 필터에 걸러지면 차단하게 해주는 과정에서 Chain들이 순서대로 실행되게 되는데
Filter Chain들 중 Spring이 자동으로 설정한 UsernamePasswordAuthenticationFilter를 거치기 전에 먼저 JwtAuthFilter라는 필터를 앞에 먼저 집어넣어 이것으로 필터링 하겠다는 역할을 해주는 코드였던 것이다.

나의 정말 어이없는 실수로 인해 시간과 피곤함은 소모되었지만...
그래도 덕분에 뇌빼고 복붙을 따라하기만 하던 Security Filter에 대해 알 수 있었던건 오히려 다행이라고 생각한다.

0개의 댓글