랄라

[TIL 23일차]25.03.19 본문

내일배움캠프/TIL

[TIL 23일차]25.03.19

devdaeun 2025. 3. 20. 10:55

인증인가 리팩토링을 시도한 기록


api에 접근하기 전 게이트웨이가 우선적으로 접근가능한 권한을 확인하게 하고싶어서

본래 user-service에 작성해 둔 SecurityConfig를 게이트웨이에 옮겨 작성하기로 했다.

 

옮기는 중 여러 사항이 발생했는데,

 

1. 사용하는 sercurity annotation 문제

기존에 작성한 SecurityConfig 의 filterchain은 @EnableWebSecurity 를 작성하여 진행했지만

게이트웨이는 기본적으로 WebFlux를 제공하도록 되어있어서 해당 어노테이션을 바꾸면

내부 코드를 많이 수정해야해서 고민이 많았다.

 

-> @EnabledWebFluxSecurity를 사용

 

1-1. 세션을 거부하는 코드가 변동됨

 

기존에는 하단의 코드를작성하여 세션 거부를 진행했는데 다른 security여서 그런지 코드가 변경이 되었다.

.sessionManagement(session -> session
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
)

 

변경된 코드에 어떻게 작성해야 될지 몰라 구글링으로 webFlux일때 세션거부코드를 작성하는 방법을 검색해보았다.

java - Disable WebSession creation when using spring-security with spring-webflux - Stack Overflow

 

Disable WebSession creation when using spring-security with spring-webflux

I am running a stateless spring-boot application with a rest api and want to disable the creation of WebSessions as described https://www.baeldung.com/spring-security-session I have created my own

stackoverflow.com

나와 같은고민을하는 사용자가 질문을 올린 사이트가 있어 확인을 해보았더니

.securityContextRepository(NoOpServerSecurityContextRepository.getInstance())

WebFlux에서는 NoOpServerSecurityContextRepository 라는 레포지토리를 사용하여

세션을 받아오지 않도록 설정을 한다고 한다!

 

1-2. 토큰인증 필터가 제일먼저 수행되어 보안 필터가 정상적으로 수행이안되는것 같다는 느낌을 받음

 

게이트웨이 필터에 대한 이해가 많이 없는상태에서 강의를 보면서 작성한 토큰인증 필터코드였는데

리팩토링을 시도하면서 이해한 바로는

@Component 어노테이션은 빈을 자동으로 추가해주는것은 맞지만.

추가를 하게되면서 우선순위가 높아져 필터가 먼저 수행되는것 같다.

 

해결방법으로 시도한것

-> jwt 토큰인증 필터 상단에 작성했던 @Component 삭제!

-> 웹 필터 체인에 작성할때 addFilterBefore를 사용해서 토큰을 추가하도록 진행해보았다.

2. csrf 토큰 오류

분명 csrf.disabled()를 처리했는데도 로직 테스트중에 

" an expected csrf token cannot be found  " 라는 메세지가 리턴되는 문제가 발생

게이트웨이에만 설정을 해둔것이 문제가 있나 싶어

본래 security config를 작성한 곳이었던 user에 csrf와 session 거부설정만 추가를 진행했다.

 

-> 추가를 하고나니 정상적으로 실행이되었다.

 

3. .hasRole이 정상적으로 수행되지않음

.pathMachers를 작성한뒤 뒤에 .hasRole으로 접근하는 사용자의 토큰을 확인하여 권한을 체크하는 로직이

정상적으로 수행되어지지않고 자꾸 세션 로그인 창이 뜨는문제가 발생했다.

 

토큰인증 필터가 우선수행이 되어지지않고 경로가 입력되면 바로 role을 분석하는것인가? 생각되어

필터를 앞에 설정해보았지만 결과는 똑같았다...

'내일배움캠프 > TIL' 카테고리의 다른 글

[TIL 25일차]25.04.14  (0) 2025.04.16
[TIL 24일차]25.03.20  (0) 2025.03.21
[TIL 22일차]25.03.18  (0) 2025.03.20
[TIL 21일차]25.03.17  (0) 2025.03.20
[TIL 20일차]25.03.14  (0) 2025.03.15