@Controller에서 요청을 받아 특정 url로 redirect시켜주는 컨트롤러가 있는데
정상적으로 요청이 전달이 되지 않는 것 같아 로그를 확인해 보니 다음과 같은 에러메세지가 떨어지고 있었다.
java.lang.IllegalArgumentException: Model has no value for key 'e_e_ttt'
at org.springframework.web.servlet.view.RedirectView.replaceUriTemplateVariables(RedirectView.java:387)
at org.springframework.web.servlet.view.RedirectView.createTargetUrl(RedirectView.java:346)
at org.springframework.web.servlet.view.RedirectView.renderMergedOutputModel(RedirectView.java:307)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1370)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1116)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:94
문제는 리다이렉트 하려는 url에 e_e_ttt라는 문자열을 '{', '}'가 감싸고 있었던 것이다.
ex) www.hello.com?name=blog¶m={e_e_ttt}
왜 문제가 되느냐???
URL내에서 몇 몇 문자는 특별한 의미로 예약되어 있거나, 어떤 문자는 US-ASCII의 출력 가능한 문자 집합에 포함되어 있지 않고 어떤 문자는 몇몇 인터넷 게이트웨이와 프로토콜에서 혼동되는 것으로 알려져 있어, 사용하면 안되는 것들이 있다.
URL에서 사용하면 안되는 문자들
% : 인코딩된 문자에 사용할 이스케이프 토큰으로 선점
/ : 경로 컴포넌트에서 선점
. : 경로 컴포넌트에서 선점
.. : 경로 컴포넌트에서 선점
# : 프래그먼트의 구획 문자로 선점
? : 질의 문자열의 구획 문자로 선점
; : 파라미터의 구획 문자로 선점
: : 스킴, 사용자 이름/비밀번호, 호스트/포트의 구획 문자로 선점
$, + : 선점
@ & = : 특정 스킴에서 특별한 의미가 있기 때문에 선점
{}|\~[]` : 게이트웨이와 같은 여러 전송 에이전트에서 불안전하게 다루기 때문에 제한됨
<> " : 안전하지 않음. 반드시 인코딩되어야함
근데 이번에 문제가 된 경우에는 {} 문자열이 있었기 때문이다.
항상 안전하지 않은 문자들에 대해서는 인코딩을 하도록 하자!!!!
'Programming > Java,Spring' 카테고리의 다른 글
JPA query 업데이트시 에러 QueryExecutionRequestException (0) | 2020.02.01 |
---|---|
[ Java, Spring ] 자바나 스프링에서 jdbc template으로 hive명령어 날릴 때 주의점(semicolon) (0) | 2019.12.10 |
[ Springboot / JPA ] JPA composite key 사용할 때 @IdClass, Serializable (2) | 2019.10.14 |
[ Spring ehcache ] ehcache를 사용할 때 주의할점 (proxy...) (0) | 2019.10.04 |
[ Springboot / JPA ] JPA @Query사용시 IllegalArgumentException 에러 (0) | 2019.08.26 |