nginx 502 bad gateway cause by setcookie

just add this nginx config

server {
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 32k
...
}
Posted in knowledge | Leave a comment

jwt จะโดน hack ได้อย่างไรบ้าง

jwt จะโดน hack ได้อย่างไรบ้าง
1. SDK library โดน hack ไปแก้โค้ด ส่งไปหา hacker ขโมย jwt จำนวนมาก
2. Private key โดน hack ไปสร้าง token ปลอมขึ้นมาเอง แต่เขาจะต้องรู้ subject (key) เพื่อเอามาเรียก api ที่ access resource จาก server ถ้าเขารู้
3. Third-party ไม่ยอมใช้ SDK library และไม่ยอม verify signature ของ jwt และเขียนเก็บ store ลง storage อาจโดนขโมย jwt จำนวนมากได้
4. “Man in the middle ดักฟัง network traffic ระหว่าง client กับ server ทุกครั้งที่ส่งข้อมูลระหว่างกันจะต้องผ่าน HTTPS เท่านั้น

# hack ตัวเองไม่นับ (รู้แค่ของตัวเอง เครื่องๆนึง ไม่ใช่จำนวนมาก) เหมือนแกะ cookie session ตัวเอง แก้ไขด้วยการกำหนด expire ของ token => https://stackoverflow.com/a/35817603/2090568

ประโยชน์ jwt
1. client จะ trust เฉพาะ issue ที่ verify digital signature ผ่าน โดยที่ไม่ต้องเรียกไป server
2. performance รวดเร็ว และ ลดโหลด server stateless

Posted in json web token (jwt), ไม่มีหมวดหมู่ | Leave a comment

BigQuery interval date Legacy SQL to Standard SQL

อ้างอิงจาก BigQuery Partitioned Tables Limitations section

“You cannot use legacy SQL to query partitioned tables or to write query results to partitioned tables.”

ดังนั้น เมื่อเราทำ Partition Table เพื่อ Performance และลด Cost ในการ query เราจึงต้องแก้ไข query จาก Legacy SQL ให้เป็น Standard SQL

ตัวอย่าง แก้ไขการ Compare Datetime

Legacy SQL

select REQUEST_DATETIME from TABLE where REQUEST_DATETIME >= TIMESTAMP(DATE_ADD("2018-04-27 10:48:34",-7,"HOUR"))

Standard SQL
1. แก้ไข TABLE เป็น `TABLE`
2. เพิ่ม #standardSQL ที่บรรทัดแรกเพื่อบอกว่า query ข้างล่างจะเป็นแบบ Standard SQL
3. ใช้ DATETIME_ADD function แทน DATE_ADD function

#standardSQL
select REQUEST_DATETIME from `TABLE` where
REQUEST_DATETIME >= TIMESTAMP(DATETIME_ADD("2018-04-27 10:48:34",INTERVAL -7 HOUR))

REQUEST_DATETIME type is TIMESTAMP

As google bigquery > Query Editor

BigQuery interval date Legacy SQL to Standard SQL

References
https://cloud.google.com/bigquery/docs/reference/standard-sql
https://cloud.google.com/bigquery/docs/reference/legacy-sql

Posted in BigQuery, technology | Leave a comment

ImageIO.read can’t read input file BufferedImage always null no error

I assume your image path is /resources/image.png. Below code show you how to read image from spring class path

if you got error

javax.imageio.IIOException: Can’t read input file!

or

java.lang.IllegalArgumentException: URI is not hierarchical

You should be using

getResourceAsStream(...);

when the resource is bundled as a jar/war or any other single file package for that matter.

then just change your code from

private BufferedImage getOverly() throws IOException {
   File classPathInput = null;
   try {
      classPathInput = new File(getClass().getResource("/image.png").toURI());
   } catch (URISyntaxException e) {
      e.printStackTrace();
   }
   return ImageIO.read(classPathInput);
}

to

private BufferedImage getOverly() throws IOException {

    InputStream in = getClass().getResourceAsStream("/image.png");

    return ImageIO.read(in);
}

ImageIO.read(*…) will only load these image types GIF, PNG, JPEG, BMP, and WBMP.

Any other image type(ICO,WEBP) will return BufferedImage is null without error. You can’t rename the extension of file but you must convert image data to available image types.

reference: http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

https://stackoverflow.com/a/15726292/2090568

Posted in spring boot | Leave a comment

websocket loadbalancing on google cloud

วิธีสร้าง websocket loadbalancing บน google cloud

ไปที่เมนู Network services >>> Load balancing >>> Create a load balancer >>> TCP Load Balancing

จากนั้นกดปุ่ม Continue

ที่ Frontend Configuration : สร้าง public ip address สำหรับ load balance

ที่ Backend Configuration : ให้เลือกเครื่องที่จะอยู่หลัง load balance

หากเราสร้าง Load balance เป็นประเภท HTTP(S) Load balancing จะทำให้พบปัญหา Websocket client ที่ต่ออยู่กับ Web socket server ด้วย ip loadbalance ถูกตัด connection อยู่ตลอด แต่หากจำเป็นต้องทำ HTTPS ก็ใช้ได้ ให้เขียน Web Socket Client auto reconnect เอาทุกๆช่วงเวลาหนึ่ง เช่นทุกๆ 30 วิ

Posted in technology, websocket | Leave a comment