• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

pathvariable 사용 시 인터셉터 문제

24.06.29 14:56 작성 24.06.30 15:46 수정 조회수 146

0

경로 변수를 사용하는 URL에 인터셉터가 예상대로 동작하지 않아서 예시를 통해 질문드립니다.

@GetMapping("/{item}/{itemId}")
public String itemDetail(@PathVariable("item") ItemType itemType, @PathVariable Long itemId, ...) {...}

ex) "/book/4", "/album/10"...

상품을 단순 조회하는 url은 로그인 체크 인터셉터 대상에서 제외합니다.

registry.addInterceptor(new LoginCheckInterceptor())
        .order(1)
        .addPathPatterns("/**")
        .excludePathPatterns("/", "/{item}", "/{item}/{itemId}", ...);

이후 "/book/11"과 같이 접속하면 비로그인 상태에서도 조회됩니다.

근데 판매자만 접근할 수 있어서 로그인이 필요한 "/book/new"라는 url이 요청되면, 예상과 달리 로그인 인터셉터를 거치지 않고 정상 조회됩니다. @GetMapping("/{item}/new")

addpathpatterens에 "/{item}/new"를 따로 추가해보거나 공식 메뉴얼을 참고해봤는데 관련된 내용을 찾지 못했습니다.

원인은 excludePathPatterns에 추가한 "/{item}/{itemId}"의 {itemId}에
요청한 url "/book/new" new가 매칭되기 때문에 "/book/new"도 인터셉터에서 제외된 것 같습니다.

그래서 url을 "/movie/100"이 아니라 "/items/movie/100"과 같이 사용하거나 또는 상품 등록 url을 "/items/new"처럼 정해서 사용해야 하는데..

이와 관련해 해결 방법이 있을까요?
그냥 dtype이나 Id값은 쿼리파라미터로 받는 게 나을지도 모르겠네요..

답변 1

답변을 작성해보세요.

0

CS님의 프로필

CS

질문자

2024.06.30

addPathPatterns만 사용해서 로그인이 필요한 url을 빼먹지 않고 추가해주는 게 최선인 것 같습니다. 그래도 url은 계층적인 구조로 바꿀 수 있게 됐네요..

채널톡 아이콘