• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

액츄에이터 URL 경로에 스프링 인터셉터 적용 문제

23.05.15 21:53 작성 23.05.16 08:04 수정 조회수 503

3


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)

[질문 내용]
안녕하세요!

수업 마지막에 URL 경로에 인증 설정을 하는 방법으로 서블릿 필터, 스프링 인터셉터, 스프링 시큐리티를 안내해 주신걸 보고

/actuator URL 경로에 인증 설정을 하려고 인터셉터를 생성해서 적용해보고 있었습니다.

아무리 해도 적용이 안되어서 이리 저리 찾아보니..

actuator 엔드포인트의 경우에는 Dispatcher를 통하지 않는 모양이더라고요. 그래서 인터셉터도 동작하지 않는 모양인데, 저는 기존에 관리자 인증 용도로 만들어둔 인터셉터가 있어서 그걸 활용하고 싶어서 어떻게든 등록을 하려고 했습니다.

https://github.com/spring-projects/spring-boot/issues/11234

여기 있는 이슈를 참고해보면, 결론적으로는 인터셉터가 아닌 필터를 사용하라고 하는데요.

그래도 선생님께서 수업에서 스프링 인터셉터를 언급해 주셔서 혹시나 actuator 경로에 인터셉터를 적용해서 사용하는 방법이 있는지, 궁금합니다

 

아래와 같이 WebMvcEndpointManagementContextConfiguration을 확장 해서 인터셉터를 추가하고, 의도대로 작동하는 것 까지는 확인을 하긴 했는데 아무래도 좋은 방법은 아닌 것 같아서요. 혹시 방법이 없을까요?


@Configuration
class ActuatorConfig(
    private val authService: AuthService,
    private val jwtConfig: JwtConfig,
    @Value("\${server.ssl.enabled}") private val isSecure: Boolean
) : WebMvcEndpointManagementContextConfiguration() {

    override fun webEndpointServletHandlerMapping(
        webEndpointsSupplier: WebEndpointsSupplier?,
        servletEndpointsSupplier: ServletEndpointsSupplier?,
        controllerEndpointsSupplier: ControllerEndpointsSupplier?,
        endpointMediaTypes: EndpointMediaTypes?,
        corsProperties: CorsEndpointProperties?,
        webEndpointProperties: WebEndpointProperties?,
        environment: Environment?
    ): WebMvcEndpointHandlerMapping {

        val webEndpointServletHandlerMapping = super.webEndpointServletHandlerMapping(
            webEndpointsSupplier,
            servletEndpointsSupplier,
            controllerEndpointsSupplier,
            endpointMediaTypes,
            corsProperties,
            webEndpointProperties,
            environment
        )

        webEndpointServletHandlerMapping.setInterceptors(
            JwtAuthInterceptor(
                authService,
                jwtConfig.tokenValidityInSeconds,
                isSecure
            )
        )
        webEndpointServletHandlerMapping.setInterceptors(AdminAuthInterceptor())

        return webEndpointServletHandlerMapping
    }
} 

 

답변 1

답변을 작성해보세요.

2

안녕하세요. shanePark님

말씀하신 것 처럼 이 경우에는 필터를 적용하는 것이 맞습니다.

스프링 인터셉터는 제가 잘못 말씀드렸네요. 이 부분은 수정하겠습니다.

스프링 시큐리티의 경우 필터를 사용하기 때문에 이슈가 없습니다.

이미 구현해두신 인터셉터를 필터로 변경하는 것이 크게 어렵지는 않을 것이기 때문에 필터를 적용하는 것을 추천드립니디.

감사합니다.

shanePark님의 프로필

shanePark

질문자

2023.05.20

답변 감사드립니다!

채널톡 아이콘