AXBoot: WildFly 9을 사용할 때의 JWTSessionHandler 문제

com.chequer.axboot.admin.utils.JWTSessionHandler는 javax.xml.bind.DatatypeConverter 클래스를 이용하여 BASE64 인코딩/디코딩을 수행합니다.
그런데 WildFly 9 버전의 경우에는 문제가 있습니다. WildFly 9은 JDK의 DatatypeConverter를 사용하는게 아니라 별도의 내장된 버전을 사용하기 때문입니다.

좀 더 정확하게는 wildfly-9.0.2.Final/modules/system/layers/base/javax/xml/bind/api/main/jboss-jaxb-api_2.2_spec-1.0.4.Final.jar 파일에 포함된 것을 사용합니다.

이 버전은 URL-safe 하지 않은 인코딩을 수행하기 때문에 쿠키를 이용한 로그인이 불가능한 심각한 문제가 발생합니다.

아래와 같이 Apache Commons Codec 프로젝트의 Base64 클래스를 사용하도록 수정하면 문제가 해결됩니다.

    import org.apache.commons.codec.binary.Base64;

    private String toBase64(byte[] content) {
        return Base64.encodeBase64URLSafeString(content);
    }

    private byte[] fromBase64(String content) {
        return Base64.decodeBase64(content);
    }

DatatypeConverter 를 써야하는 특별한 이유가 없다면 원본 소스도 이렇게 변경하는게 좋을 것 같습니다. 어차피 Commons Codec 프로젝트에는 이미 디펜던시가 있으니까요.


EOF