JWT payload (claims, body) 부 암호화 및 복호화 방법 JWT를 사용하는것 자체가 암호화된 json 문자열로 전송을 하는건데 무슨 암호화 및 복호화를 또 하느냐!? 암호화가 된다 하더라도 jwt.io 에서 알고리즘만 알고 있다면 다시 복호화된 값으로 볼수 oingdaddy.tistory.com 위에 나온것처럼 AES를 사용해서 암호화를 했는데 Invalid AES key length 오류가 발생하는 경우가 있다. 이것은 정말 명확한 오류 메세지이다. 글자수가 잘못되었다는 것이다. AES 암호화를 하는데 사용되는 Key는 16, 24, 32 byte 여야 한다. public class Aes256Util { final static String secretKey = "oingisprett..

JWT를 사용하는것 자체가 암호화된 json 문자열로 전송을 하는건데 무슨 암호화 및 복호화를 또 하느냐!? 암호화가 된다 하더라도 jwt.io 에서 알고리즘만 알고 있다면 다시 복호화된 값으로 볼수 있다. 그래서 보통 JWT로 통신을 할때는 payload에 중요한 정보를 넣지 않는것이 권장이 된다. userId, expireTime 등등의 정보만 보통은 가지고 있다. 하지만 중요한 정보를 payload에 넣어야 될수도 있고 userId도 노출이 되면 안되는 경우도 있다. 이럴 경우에는 payload 부분을 암호화를 해줘야 한다. 서로 통신을 하는 것이므로 단방향 암호화는 사용할 수 없고 양방향 암호화를 사용해야 한다. 양방향 암호화의 대표적인 알고리즘은 AES(Advanced Encryption Sta..
CSV파일은 지금은 많이 안쓰이지만 그래도 종종 사용이 된다. 여러가지 OSS가 이를 지원해주고 있지만 그중 간단하게 CSV파일을 파싱할 수 있는 방법을 소개한다. 일단 univocity-parsers dependency 추가가 필요하다. pom.xml com.univocity univocity-parsers 2.8.4 TestCSV.java import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.List; import com.univocity.parsers.csv.CsvParser; import com.univocity.parsers.csv.CsvParserSettings; ..

웹어플리케이션을 개발하면 거의 필수적으로 하는 것이 바로 클라이언트 IP를 획득하는 것이다. 왜냐? 누가 뭘 하는지 알아야 문제가 생겼을때 대처가 가능하기 때문이다. 어떻게 IP를 얻어올수 있는가? public static String getClientIp(HttpServletRequest req) { String ip = req.getHeader("X-Forwarded-For"); if (ip == null) { ip = req.getRemoteAddr(); } return ip; } 이렇게 간단하게 IP 정보를 획득할 수 있다. 그냥 req.getRemoteAddr() 을 통해서 가져올수도 있지만 내 웹서버를 통해서 들어오는 경우면 클라이언트 IP를 가져오는게 아닌 웹서버의 IP를 가져오기 때문에 클..
요즘 JAVA 버전이 참 정신없이 나오고 있다. 6개월에 한번씩 버전업데이트라니... 유료화 되면서 구독형 라이센스니 뭐니 해가지고 신경써야 되는게 늘었다... 개발환경을 구성해야 하는 입장에서는 발빠르게 대응을 해야하는데 쉽지 않다. 꽤 오랜기간 JAVA 8을 사용하다가 이제 놓아주고 JAVA 11로 넘어가야하는 상황이다. OpenJDK를 써야 하지만 자바 애플릿같은걸 나는 쓰지 않기 때문에 큰 무리는 없게 전환이 가능할 것으로 예상이 되었다. 실제로도 Oracle JDK냐 OpenJDK냐는 migration을 하는데 크게 영향이 없었다. 그만큼 OpenJDK의 성능이나 기능 모두 문제없이 성장했다. JDK 10 JDK 10 JDK 10 is the open-source reference impleme..

어떤 클래스를 리눅스 서버에 배포를 했더니 위와 같은 오류가 서버 로그에 출력이 되었다. 오류 내용은 java.awt.HeadlessException: no x11 display variable was set but this program performed an operation which requires it .... 생전 처음보는 오류라 이것은 뭔가 했더니 GUI 환경이 지원되지 않는 곳에서 GUI 관련 API(Java Swing, JavaFx, Java AWT 등)를 사용했을때 발생하는 오류라고 한다. 자바 코드에 이런 메소드를 사용하지는 않았는지 확인해본 결과.. 누군가가 javax.swing 의 메소드를 사용하고 있었다. 이부분을 제거하면 위의 오류는 해결된다.
CORS 란 간단히 말해 서로 다른 도메인간 통신을 하는것을 승인하거나 차단하는 것. 차단이 되어 있을때는 여러가지 방법( eg. jsonp, proxy, 웹서버설정 등)으로 해결할수 있지만 그중 filter를 이용해서 해결하는 방법을 써본다. CORSFilter.java import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; impor..