You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
로그인 여부에 따라 결과값이 달라지는 api - 케이크 조회, 스토어 조회 등등(로그인 여부에 따라 좋아요 하트 표시가 달라짐)
로그인이 상관없는 api - 좌표 조회, 지하철역 조회 등등
위와 같은 요구사항을 만족시키기 위해서 처음에는 argument resolver를 사용해서 나누어서 구현하려고 하였다.하지만 argument resolver까지 가기 전인 filter 단에서 처리하면 더 좋다고 판단하였고, customFilter를 두가지(로그인 필수 api, 로그인 여부에 따라 달라지는 api) 만들어서 구현하였다.
처음에는 spring security를 이용해서 securityConfig 안에서 custom filter를 구현하고, 원하는 api uri를 해당하는 custom filter에 적용시켰다. 하지만 원하는 대로 custom filter들에게 uri가 적용되지 않았다.
그래서 여러 군데 검색도 하고 알아보니까, SecurityConfig는 요청이 필터 체인을 통과하기 전에 모든 필터가 한 번씩 실행되도록 설계되어 있었다. 또한 SecurityConfig에 필터를 추가하면, 해당 필터는 Spring Security의 체인 내부에서 동작하게 된다. 이는 특정 API 경로에만 필터를 선택적으로 적용하는 것을 어렵게 만든다고 한다.
그래서 위 요구사항에 맞게 custom filter를 사용하려면 spring security의 filter chain이 아닌, 서블릿 컨테이너 수준에서 작동되는 filter chain에서 custom filter를 만들어야했다. 이때 FilterRegistrationBean 를 사용하여 filter를 등록하고, addUrlPatterns() 를 이용해서 원하는 url을 원하는 filter에 넣었다. setOrder는 filter의 우선순위를 설정하는데, 현재 요구사항에서는 해당 url들이 각각의 해당하는 customfilter에 들어가기 때문에 상관없어서 아무 숫자나 넣었다. 그리고 addUrlPatterns()만 사용하였을때, 원하는 대로 완벽하게 각각의 customFilter에 잘 들어가지 않았다. 그래서 shouldNotFilter 도 사용하여서 각 custom filter의 해당하지 않는 url들을 넣어주었다. 그랬더니 잘 작동하였다.
또한 모든 url들은 우선 securityFilter를 통과하게 permitAll 을 하였다.
아래는 구현 코드이다.
spring security에 관한 securtyConfig는 다 기본 세팅만 해두고, 나머지 customfilter는 filterConfig에서 설정하였다.
서버 트러블 슈팅 - 성준 filter
Custom Filter
💡케이키는 Auth 쪽 요구사항에서 크게 3가지 api로 나뉜다.
위와 같은 요구사항을 만족시키기 위해서 처음에는 argument resolver를 사용해서 나누어서 구현하려고 하였다.하지만 argument resolver까지 가기 전인 filter 단에서 처리하면 더 좋다고 판단하였고, customFilter를 두가지(로그인 필수 api, 로그인 여부에 따라 달라지는 api) 만들어서 구현하였다.
처음에는 spring security를 이용해서
securityConfig
안에서custom filter
를 구현하고, 원하는 api uri를 해당하는custom filter
에 적용시켰다. 하지만 원하는 대로custom filter
들에게 uri가 적용되지 않았다.그래서 여러 군데 검색도 하고 알아보니까,
SecurityConfig
는 요청이 필터 체인을 통과하기 전에 모든 필터가 한 번씩 실행되도록 설계되어 있었다. 또한SecurityConfig
에 필터를 추가하면, 해당 필터는 Spring Security의 체인 내부에서 동작하게 된다. 이는 특정 API 경로에만 필터를 선택적으로 적용하는 것을 어렵게 만든다고 한다.그래서 위 요구사항에 맞게 custom filter를 사용하려면 spring security의 filter chain이 아닌, 서블릿 컨테이너 수준에서 작동되는 filter chain에서 custom filter를 만들어야했다. 이때
FilterRegistrationBean
를 사용하여 filter를 등록하고,addUrlPatterns()
를 이용해서 원하는 url을 원하는 filter에 넣었다.setOrder
는 filter의 우선순위를 설정하는데, 현재 요구사항에서는 해당 url들이 각각의 해당하는 customfilter에 들어가기 때문에 상관없어서 아무 숫자나 넣었다. 그리고 addUrlPatterns()만 사용하였을때, 원하는 대로 완벽하게 각각의 customFilter에 잘 들어가지 않았다. 그래서shouldNotFilter
도 사용하여서 각 custom filter의 해당하지 않는 url들을 넣어주었다. 그랬더니 잘 작동하였다.또한 모든 url들은 우선 securityFilter를 통과하게
permitAll
을 하였다.아래는 구현 코드이다.
spring security에 관한 securtyConfig는 다 기본 세팅만 해두고, 나머지 customfilter는 filterConfig에서 설정하였다.
securtyConfig
filterConfig
OptionalAuthenticationFilter
- 로그인 여부에 따라 달라지는 api filterRequiredAuthenticationFilter
- 로그인 필수 api filterThe text was updated successfully, but these errors were encountered: