[DevTips] @PathVariable에서 "#" 처리하기

유영재·2024년 6월 6일

DevTips

목록 보기
2/2
post-thumbnail

Springboot로 개발을 하던 어느 날 갑자기 뿔이 자랐다 ..
@PathVariable을 열심히 쓰고 있는데 API Path에 # 을 사용해야 할 일이 생겼다..
하지만 계속되는 400대 에러에 머리가 혼미해지는데 ..

Issue

기본적으로 Spring Security에는 여러가지 Filter들이 걸려 있는데,
그 중 DisableEncodeUrlFilter 요 녀석이 방해하고 있는 것 같았다.

DisableEncodeUrlFilter

세션 ID가 URL에 포함되는 것을 막기 위해 HttpServletResponse를 사용해서 URL이 인코딩 되는 것을 막기 위한 필터

세션 ID가 # 으로 표기되므로, 이 녀석이 인코딩되는 것을 막기 위한 필터임 .. 이런것도 있구나 ....


Solution

 @GetMapping("/retrieve/{pattern}")
public ResponseEntity<?> retrieve(@PathVariable("pattern") String pattern) throws UnsupportedEncodingException {
    String decodedPattern = URLDecoder.decode(pattern, StandardCharsets.UTF_8);

#%23 을 decode 하면 나오므로, 클라이언트에서 인코딩해서 보내주면 서버에서 디코딩하는 방식을 사용했다.

클라이언트에서 보낼때, #1 이렇게 보내지 말고, %231 이렇게 보내면 된다 !


API Path에 #을 포함하지 않으면 되지 않냐고? 그러면 된다...
그치만 알고 있어서 나쁠 건 없으니 :) ...

profile
계속해서 의심하고, 고민하고, 질문하며 성장하는

0개의 댓글