เมื่อ blog ก่อนๆ ได้ทำ OAuth2 authentication ให้กับระบบงาน พอลองเล่นกับพวก error พบว่าระบบ return response กลับไปไม่เหมือนกัน

ผมคิดว่าเราควรจะต้องปรับปรุง API ของเราให้ return response ในรูปแบบที่คล้่ายๆ กัน และ HTTP status code (401, 403) สื่อถึง error ที่เกิดขึ้นจริงๆ (แต่ถ้าใครมาทางลัทธิส่ง HTTP status code 200 ต่างกันที่ error message ก็แล้วแต่)

ขอหยิบยกส่วนของ resource server configuration จาก blog ก่อนขึ้นมา

สร้าง SecurityExceptionHandler ขึ้นมา

คำอธิบาย ทำการ handle ทั้ง authentication และ authorization error โดยสร้าง ResponseEntity ของ Spring ขึ้นมา จากนั้นก็แปลงเป็น HttpServletResponse โดยใช้ Jackson เป็นตัว map Java Object เป็น JSON String

เสร็จแล้วก็ไป configure resource server ให้ใช้ handler ตัวนี้

ทำการทดสอบด้วยการใช้ API

ไปดูตัวอย่างโค้ด https://github.com/raksit31667/example-spring-order