[JWT] Idea การออกแบบ Token สำหรับ Microservice

พอดีลองมาเยอะครับ เลยขอสรุป Pattern ที่ใช้ครับ Blog นี้อาจจะสั้นนิดนึงนะ โดยผมแยก Token ออกเป็น 2 กลุ่ม ได้แก่ Access Token กับ Refresh Token โดยแต่ละอันมีรายละเอียด ดังนี้ Access Token ระยะเวลาสั้น เก็บ Anything เช่น พวกสิทธิในระบบ Size ยิ่งใหญ่ทำให้ Request นานๆ ข้อมูลบางอย่าง เช่น พวกสิทธิ อาจจะต้องแปลงให้เล็กที่สุด โดยอาจจะทำเป็นเลขฐาน 2 แทน ถ้า Expired Return Code 4xx แต่ไม่ได้อยู่ในมาตรฐานนะ แล้วแต่องค์กรจะตกลงกัน Refresh Token ระยะเวลายาว – เก็บว่า User ยังอยู่ในระบบนะ เอาไปขอ Access Token ถ้า Logout ไป Server ต้องเก็บ Token Id ว่ามัน Expired ไปแล้ว มันไม่สามารถมาขอ Token อื่นๆได้ Pettern ของ Return Code 401 403  

[JAVA] ดึงนามสกุลไฟล์ จากไฟล์ที่ถูก Upload เข้ามาผ่าน Multipart file

ดึงนามสกุลไฟล์ จากไฟล์ที่ถูก Upload เข้ามาผ่าน Multipart file โดยสามารถใช้ Code ได้ ดังนี้ครับ เพิ่ม Library Apache Commons IO  ลงในไฟล์ pom.xml  ครับ จากนั้นเรียกใช้ Class FilenameUtils  ที่อยู่ใน Library Apache Commons IO ตัวอย่าง Code ที่ใช้ดึงนามสกุลไฟล์ จากไฟล์ที่ถูก Upload เข้ามาผ่าน Multipart file ครับ String extension = FilenameUtils.getExtension(file.getOriginalFilename());  

[DB] DBeaver – เครื่องมือที่ช่วยให้การจัดการ Database เป็นเรื่องง่ายๆ

หลังจากเข้าไปดูปัญหาของหลายๆทีม พบว่า Tools ตัวเก่าอย่าง WinSQL มันเก่ามาก น่าจะ 15 ปี และ ถึงว่าเป็น Software ที่ใช้คุ้มค่าเกินราคาจริงๆครับ แต่ต้องซูฮกคนออกแบบด้วยทั้งตัว Protocal – ODBC และภาษา SQL จึงทำให้ Tools ตัวนี้ตายยากมากๆครับ แม้ว่าจะมีปัญหาจุกจิมากครับ ทั้งปัญหาการเอาผลลัพธ์ที่ได้จาการ Query ไปใช้ต่อ หรือการที่ User ต้องเชี่ยวมากจำ Column ได้แม่นครับ แต่หลังจากนี้ปัญหาจะหมดไปด้วยเจ้า DBeaver ครับ โดยเวอร์ชัน Community Edition ผมได้ลองใช้ และแนะนำในองค์กรครับ มันเพียงพอกับการใช้งานทั่วไป เช่น หัวข้อใน Blog นี้ เริ่มติดตั้งกันเลย มาลองเชื่อมต่อ DB2 มาลองใช้ DB ของ Microsoft บ้าง

[BPMN] มา Test BPMN ที่สร้างจาก Camunda กันครับ

หลังจากยุ่งกับงานประจำนานเลย ตอนนี้เริ่มกลับมาทำงาน Thesis แล้วครับ ถ้าใครสร้าง BPMN ด้วย Camunda ไปแล้วนั่น หาจะทดสอบมีได้หลายวิธีครับ เช่น Deploy Process เข้าไปที่ตัว BPMN Engine แล้วกด Test เลย Deploy Process แล้วใช้ REST API ของ BPMN Engine เพื่อส่งค่าเข้าไป แต่ถ้ามาดูที่ตัว Camunda มีตัวช่วยสำหรับ Test เหมือนกันครับ โดยมีตัวช่วย ดังนี้ Test Project Template + Camunda BPM Assert สำหรับใน Blog ตอนนี้ผมใช้ Camundate BPM Assert ที่มันถูก Include เข้ามาใน Project Template ครับ มาลุยกันเลย มาดูที่ BPMN ที่ต้องการทดสอบก่อนครับ เป็น Flow การกู้เงินอย่างง่าย simpleLoan.bpmn ผมตั้ง Id และ Name ว่า “simpleLoan” ครับ ส่วน Task นั้นผมได้กำหนด id และ Name ให้ชื่อเหมือนกันครับ แต่ Id มีข้อจำกัด เรื่องของ space ผมเลยใช้ underscore (_) แทนครับ โดยที่ต้องการตั้งชื่อให้มันสื่อ เพราะจะได้เอาไปใช้ใน Unit Test ครับ จาก BPMN ที่ได้มา ผมสามารถกำหนด Test Path ได้ 3 เส้นทางครับ ดังนี้ มาลุย Code…

สรุปงาน .NET Conf 2018! BKK

วันนี้ผมมาแบบงง จริงๆมาเปลี่ยนที่ทำ Thesis และก็ฟังหัวข้อที่สนใจครับ ผมเลยอาจจะเก็บรายละเอียดมาไม่ครบนะครับ โดยสำหรับสถานที่จัดงานอยู่ที่ Launchpad ในถนนปั้น หรือ ซอยปั้น ห่างจาก BTS สุรศักดิ์ ไม่เกิน 500 เมตรครับ 09:30-10:20| What’s coming to C# Speaker: Will Fuqua A look in the future: Nullable reference types, recursive patterns, asynchronous streams and more. C# / TypeScript จากแนวโน้มของ stackoverflow insight 2017 ยังเป็นที่นิยมครับ dotnet strategy 2017 (WIN – WIN ครับ) โดยจะเป็นการ C# 7.x Feature C# 8.0 Feature สำหรับผมนะครับตัว Default Interface ไม่จำเป็นอย่าใช้ เพราะ มันมีโอกาศเกิด diamond inheritance problem ได้ครับ 10:40-11:30| Build Great Libraries using .NET Standard Speaker: Aaron Amm Theeranit 11:30-12:20| Code at scale Speaker: Joel Dickson Agoda ใช้ Flow ตาม Git เลยครับ แต่ Branch จากนั้นทำเสร็จ Pull Request Good Code…

[MS WORD] มาใส่เลขอ้างอิงให้กับสมการดีกว่า

บ่อยครั้งที่เราต้องทำเอกสาร มีพวกสูตรมากมายเต็มไปหมด แต่ต้องมาไล่ลำดับเหรอเหรอ จริงๆ MS Word มีตัวช่วยอยู่แล้วครับ สามารถเข้าไปดูวิธีการทำได้เลยครับ โดยมีขั้นตอน ดังนี้ครับ ขั้นตอนสามารถทำได้ตามรูปเลยครับ ถ้างงมีคำอธิบายด้านล่างครับ ขั้นตอนที่ 1 : เลือกหมายเลข หรือสูตรที่ต้องการจะใส่เลขอ้างอิง ขั้นตอนที่ 2: ไปทีท Ribbon >> Reference เลือก Insert Caption ขั้นตอนที่ 3: เป็นการกำหนดการตั้งค่าของเลขอ้างอิงครับ ถ้าใช่ของ MS Word ที่มีมาให้ก็สามารถเลือก Equation ได้เลยครับ แต่ถ้าต้องการ Customize ทำได้ ดังนี้ New Label – สร้าง Label ให้ เช่น “สมการที่” Exclude Label from Caption เพื่อไม่ให้แสดง Label แต่แสดงเฉพาะหมายเลขครับ ขั้ยตอนที่ 4: Numbering กำหนดรูปแบบตัวเลข โดยจะเชื่อมโยงกับสารบัญก็ได้ครับ หรือจะตามลำดับก็พอ ขั้นตอนที่ 5: เมื่อกำหนดค่าเรียบร้อยแล้ว กด OK เลย ผลลัพธ์ที่ได้ครับ

[SPRING] สร้าง Form Upload ไฟล์ และบันทึกข้อมูลครับ

หลังจากโดนมรสุมงานหนักมาตั้งแต่ต้นปีครับ กว่าจะได้กลับบ้านที่ก็ปาไป 3 ทุ่มกว่าๆ ถึง 4 ทุ่มและ เริ่มกลับมาทำ Thesis สักทีครับ สำหรับโจทย์ที่ผมเอามาเขียน Blog ครั้งนี้เป็นการ Upload File จากนั้น Save ที่ไฟล์ที่ Server ครับ พร้อมกับบันทึกข้อมูลที่ป้อนเข้ามาจาก User ครับ เตรียมตัว Just Coding ครับ สังเกตุดีๆ ผมมี Property ที่เกี่ยวกับ Multipart ชื่อ BPMNFile ครับ โดย Property นี้ ผมกำหนดเป็น @Transient  ครับ ซึ่งเป็นตัวที่บอก Hibernate ว่าไม่ต้องสร้าง Column นี้ลงที่ฐานข้อมูลครับ หน้าตาของระบบ (ผมไม่มีหัวการออกแบบเลยครับ 555) ปัญหาที่พบหละ ?  

Ingress Anomaly Bangkok 2018

หลังจากย้ายเกมส์ที่เล่นบนรถเมล์จาก Pokemon GO มาเป็น Ingress ซึ่งเป็นเกมส์แนว Location Based ครับ โดยเราจะได้รับบทเป็น Agent เป็นสายลับนั้นเองครับ สำหรับที่สนใจเกมส์สามารถไปอ่านต่่อได้ครับ เอ้าเรากลับมากันที่ Anormaly Bangkok โดยงาน Anormaly เป็น Event ที่ทางทีมผู้พัฒนาจัดให้ผู้เล่นเข้ามาทำกิจกรรมร่วมกันครับ โดยในปีนี้จัดในวันที่ 20-21 ตุลาคม 2561 ครับ โดยจะมีงาน 2 ส่วน งาน Recursion Prime งานนีัจะเล่นทำตามท้องเรื่องเลยครับ ที่ Agent ทั้ง 2 ฝ่ายต้องเข้ามาแย่งชิง แข่งขัน ตามกติกาที่ NIA กำหนดไว้ครับ โดยพื้นที่ในการแข่งขันถือว่ากว่ามากครับ เท่าที่ถามทาง POC มา เพราะปกติแต่ 1 ตารางกิโลเมตรครับ แต่ปีนี้พื้นที่ใหญ่ขึ้นนะครับ – ผมเข้าใจว่าเป็นพื้นที่เกาะรัตนโกสินทร์นะครับ โดยพื้นที่ที่ใช้แข่งเรียกว่า PlayBox ครับ สำหรับการแข่งขันมีการแข่ง 4 แบบ ในช่วงเวลาที่กำหนดครับ อันนี้ผมสรุปตามที่เข้าใจนะครับ งานนี้เวลาที่แข่งช่วง 11:00 – 14:00 ครับ ความซับซ้อนของการแข่งขัน คือ ในแต่ละช่วงเวลามีการแข่งขันมากกว่า 1 แบบครับ ขนานกันไปครับ ทำให้ฝ่ายวางแผนต้องคิดหนักเลย ส่วนเราเป็นหน่วยปฏิบัติการครับ ทำตามหน้าที่ก็พอครับ สำหรับผมเนื่องจากมาใหม่ เลยได้ดูแลพื้นที่ในส่วนของศาลาว่าการกรุงเทพฯครับ ซึ่งมีจำนวน 5 Portal ครับ พื้นที่รวมพล วางแผน และเติมพลังครับ ถึงจุด Registration แล้วครับ ^_^ จากที่บอกไปว่าการแข่งขันมันแค่ 3 ชั่วโมงครับ แต่จริงๆสงครามมันเริ่มต้นตั้งแต่ 7 โมงแล้วครับ ที่ทางฝ่าย Resistance เริ่มโจมตีเข้ามาครับ ส่วนเราทำยังไงก็ได้ให้เสาเป็นของฝ่าย Enlightment ก็พอครับ ความเข้มข้นอยู่ในช่วง…

[C#] DTO/Mapper Class Example

C# Logo

DTO คือ อะไร? DTO คือ Data Transfer Object พูดง่าย ๆ ก็คือเป็น object ที่ใช้ในการส่ง data กันในระบบครับ นอกจากนี้แล้ว การใช้ DTO ยังเป็นการ Limit ข้อมูล หรือมองว่าเป็นการกำหนด Pattern ให้กับ Request / Response กับระบบ และยังป้องกัน Over-posting Attack (คนร้ายเดา Field ได้ถูก แล้วลองส่ง Request เข้ามา) ถ้าไม่มี DTO ดักไว้ จะมีข้อมูลเกินเข้าไปมาได้ครับ จากตัวอย่าง CustomerDTO ของเราจะมี 6 Field แต่ตัว CreateCustomerDTO เรา Limit ไว้ 3 Field ถ้าแบบเดิมตอน Create เราไม่มี DTO มากัน Attacker สามารถเดา Field และส่งมาได้ครับ Mapper Class Example สำหรับผม Pattern ที่ใช้ DTO และในชั้น Repository ทำตัว Mapper Class ระหว่าง DTO กับ Model (Model Class ที่เป็นตัวแทนของ Table ใน Database ครับ ตัวอย่าง Class ที่ Map ระหว่าง DTO และ Data Mapper ใน pattern of enterprise application architecture…

[VM] เปลี่ยนเลข UUID ของ Virtual Disk ใน Virtual Box

พอดีมีงานทีต้องทำแบบฉุกเฉิน เนื่องจากน้องที่รับงานนี้อยู่ติดปัญหาจากความไม่เข้าใจในคำสั่งที่ใช้จัดการ Database ครับ ปล่อยปัญหาไปครับ ตอนนี้สิ่งที่ผมต้องรับมาแก้ไข หรือหา VM ที่ใกล้เคียงที่สุดมาขึ้น แต่ Copy VM มาขึ้นครับ ปรากฏว่า สาเหตุมันเกิดจากค่า UUID นั้น ซ้ำครับ เพราะมันเคยขึ้น Disk ของ VM นี้แล้วครับ โดย UUID มันเป็น ID ที่ใช้สำหรับใน Virtual Box โดยกำหนดไม่ให้ Virtual Disk  ซ้ำกันครับ โดยสำหรับการแก้ไขง่ายๆครับ กรณีที่ UUID ซ้ำ คือ การ Generate UUID ใหม่ครับ กำหนด uuid Windows Linux