Seongsiks

Being A DevOpser. Powered by
Obtvse, highlight.js, theme toc Creative Commons License
Seongsiks Twitter Github Email
DevOps Ruby On Rails Chef Projects Misc Movies & Drama ME

URLDecoder: Illegal hex characters in escape (%) pattern - For input string: “.P”

Overview

spring같은 편리하고 오랫동안 발전해온 프레임웍을 사용하다보면 이런 urldecoding같은 것은 거의 신경쓰지 않게 되지만 Netty같은 http서버를 직접 띄우는 경우에 http parser을 어느정도 만들어 줘야 하는 경우가 있습니다. URLDecoder: Illegal hex characters과 같은 exception이 이렇게 신경 안쓰고 넘어가던 것인데요 사용자가 %문자를 제대로 URLEncode해주지 않았을 경우 발생할 수 있습니다.

해결법

해결법 자체는 너무 간단합니다. 그냥 제대로 이스케이프 되지 않은 '%'를 '%25'로 바꿔준 후 urldecode를 실행 시키면 됩니다^^

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
        throws Exception {
    Map<String, String> params = new LinkedHashMap<String, String>();
    HttpRequest request = (HttpRequest) e.getMessage();

    QueryStringDecoder decoder = request.getUri().replaceAll("%(?![0-9a-fA-F]{2})", "%25");
    params = decoder.getParmeters();
}
comments powered by Disqus
Back to Misc