ในยุคปัจจุบันที่การพัฒนาเว็บแอปพลิเคชันเป็นเรื่องที่จำเป็นและหลีกเลี่ยงไม่ได้ ความปลอดภัยในการใช้งานเว็บแอปพลิเคชันเหล่านี้ถือเป็นสิ่งสำคัญที่ต้องคำนึงถึงอย่างยิ่ง หนึ่งในกรอบการทำงานที่ได้รับความนิยมสูงสำหรับการรักษาความปลอดภัยในแอปพลิเคชันที่พัฒนาโดยใช้ Spring Framework ก็คือ Spring Security ซึ่งเป็นเครื่องมือที่มีประสิทธิภาพและมีความยืดหยุ่นสูง ช่วยให้เราสามารถจัดการเรื่อง Authentication และ Authorization ได้อย่างง่ายดาย ในบทความนี้ เราจะมาพูดคุยกันในประเด็นที่สำคัญคือการกำหนด Role และ Permissions ใน Spring Security
ก่อนจะไปดูวิธีการตั้งค่า เรามาทำความเข้าใจความหมายของ Role และ Permission กันก่อน
- Role คือ บทบาทที่ใช้ระบุระดับการเข้าถึงของผู้ใช้งาน ตัวอย่างเช่น `ADMIN`, `USER`, `MODERATOR` เป็นต้น - Permission คือ สิทธิ์ที่ถูกกำหนดอย่างละเอียดกว่า Role ซึ่งอาจใช้กำหนดว่าผู้ใช้งานสามารถทำอะไรได้บ้างในแต่ละบทบาท เช่น `READ_PRIVILEGES`, `WRITE_PRIVILEGES`
การทำงานร่วมกันกับ Spring Security ในการจัดการ Role และ Permissions จะช่วยควบคุมการเข้าถึงข้อมูลหรือฟังก์ชันต่างๆ ของเว็บแอปพลิเคชันโดยมีขั้นตอนดังนี้:
1. การกำหนด Configuration: คุณสามารถกำหนด Role และ Permissions ผ่านการปรับแก้ไฟล์ `WebSecurityConfigurerAdapter` 2. การใช้ @PreAuthorize และ @Secured: Spring Security รองรับการกำหนดสิทธิ์ผ่าน Annotation ที่สะดวกสบาย ตัวอย่างเช่น- `@PreAuthorize("hasRole('ROLE_ADMIN')")`
- `@Secured("ROLE_USER")`
3. การสร้าง Custom Security Expression: ช่วยให้สามารถสร้างการตรวจสอบได้อย่างละเอียดและเจาะจงยิ่งขึ้น เช่น เช็คว่าผู้ใช้งานรายนี้เป็นเจ้าของข้อมูลชุดนี้จริงหรือไม่
ต่อไปนี้เราจะมาอธิบายด้วยตัวอย่างโค้ดง่ายๆ ในการกำหนด Role และ Permissions ใน Spring Security:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.logout()
.permitAll();
}
}
ในโค้ดด้านบน เราได้กำหนดให้เส้นทางที่ขึ้นต้นด้วย `/admin/` สามารถเข้าถึงได้โดยผู้ใช้งานที่มี Role เป็น `ADMIN` เท่านั้น และเส้นทางที่ขึ้นต้นด้วย `/user/` สามารถเข้าถึงได้โดยผู้ใช้งานที่มี Role เป็น `USER` การอนุญาตการเข้าถึงนี้ทำให้ทรัพยากรในเว็บแอปพลิเคชันถูกป้องกัน และอนุญาตให้เข้าถึงได้เฉพาะผู้ที่มีสิทธิ์เท่านั้น
ในกรณีที่เราต้องการสร้างระบบบริหารจัดการเนื้อหา (CMS) สำหรับเว็บไซต์ ในระบบนี้ผู้ใช้งานอาจมีทั้งบทบาทของผู้จัดการ ผู้เขียนเนื้อหา และผู้ชม โดยที่:
- ผู้จัดการ (Admin) จะมีสิทธิ์ในการเพิ่ม ลบ หรือแก้ไขเนื้อหาได้ทั้งหมด
- ผู้เขียน (Editor) จะมีสิทธิ์ในการแก้ไขเนื้อหาแต่ไม่สามารถลบได้
- ส่วนผู้ชมทั่วไป (Viewer) จะสามารถดูเนื้อหาได้เท่านั้น
การออกแบบ Role และ Permission ตรงนี้จะช่วยให้เราสามารถควบคุมการทำงานของผู้ใช้ให้เกิดความปลอดภัยและเข้าใจง่ายยิ่งขึ้น
ที่ Expert-Programming-Tutor (EPT) เราไม่ได้แค่สอนเขียนโปรแกรมเบื้องต้นเท่านั้น แต่ยังมุ่งเน้นให้ผู้เรียนเข้าใจพื้นฐานด้านรักษาความปลอดภัยในโลกของโปรแกรมมิ่งด้วย Spring Security โดยทีมผู้สอนผู้มีประสบการณ์ คอร์สอบรมของเราถูกออกแบบมาให้เข้าใจง่าย มีการลงมือทำจริงในโปรเจ็กต์เพื่อให้ผู้เรียนได้รับประสบการณ์ตรง เหมาะสำหรับทั้งผู้ที่เริ่มต้นและผู้ที่ต้องการเพิ่มพูนทักษะในสายงานนี้
การกำหนด Role และ Permissions เป็นเรื่องที่ทุกคนสามารถเรียนรู้และนำไปใช้ได้จริง ไม่ว่าจะเป็นนักพัฒนามือใหม่หรือมือโปรก็ควรมีความรู้เรื่องนี้ หากคุณสนใจและต้องการพัฒนาทักษะในด้านนี้ ทำไมไม่ลองมาเรียนกับเราที่ EPT ดูล่ะ?
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM