يوفر هذا التعليق التوضيحي طريقة لإضافة تكوين الأمان إلى أساليب العمل.
سيستخدم الأدوار للتحقق مما إذا كان لدى المستخدم إذن للاتصال بهذه الطريقة. التعليق التوضيحي جزء من أمان الربيع. لذا لتمكين استخدامه، فأنت بحاجة إلى تبعية أمان الربيع.
لديك تطبيق يحتوي على منتج CRUD. في هذا CRUD تريد التحكم في العمليات باستخدام دورين محددين.
يمكنك استخدام @Secured لإدارة الوصول إلى تلك الأدوار في كل عملية.
يمكننا تحديد الأدوار التالية في السيناريو الخاص بنا.
ليقرأ:
للتحديث:
لحذف:
دعونا نلقي نظرة على مثال التعليمات البرمجية ونلاحظ سلوك التطبيق.
للعمل مع التعليق التوضيحي @Secured، أضف تبعية Maven لـ Spring Security:
org.springframework.boot spring-boot-starter-security
نقوم بتعليق الطرق باستخدامSecured لتحديد الأدوار التي يمكنها الوصول إلى سلوك الطريقة.
public class Product { private Long id; private String name; private BigDecimal value; //getters and setters } @Service public class ProductService { @Secured({"ROLE_USER", "ROLE_ADMIN"}) public Product createProduct(Product product) { // Logic for creating a product return product; } @Secured({"ROLE_USER", "ROLE_ADMIN"}) public Product getProductById(Long id) { // Logic for fetching a product return null; } @Secured("ROLE_ADMIN") public Product updateProduct(Product product) { // Logic for updating a product return product; } @Secured("ROLE_ADMIN") public void deleteProduct(Long id) { // Logic for deleting a product } }
تحتاج إلى إضافة @EnableGlobalMethodSecurity(securedEnabled = true) لتكوين تطبيق Spring الخاص بك لاستخدام أمان أسلوب التمكين باستخدام @Secured.
@SpringBootApplication @EnableTransactionManagement @EnableGlobalMethodSecurity(securedEnabled = true) public class MasteryApplication { public static void main(String[] args) { SpringApplication.run(MasteryApplication.class, args); } }
في مثالنا، سنقوم باختبار السلوك باستخدام الاختبارات، لذلك نضيف تبعية اختبار التمهيد الربيعي.
org.springframework.security spring-security-test test
ثم نقوم بإنشاء اختبارات للتحقق من صحة استخدام مستخدم وهمي وتعيين أدوار محددة له، يمكننا اختبار المستخدمين في كل دور وكيفية تصرف تطبيقنا. ومن خلال القيام بذلك، يمكننا التأكد من أن الأدوار المناسبة فقط هي التي يمكنها تنفيذ الإجراءات المسموح بها.
@SpringBootTest class ProductServiceTests { @Autowired private ProductService productService; @Test @WithMockUser(roles = "USER") void testCreateProductAsUser() { Product product = new Product(); assertDoesNotThrow(() -> productService.createProduct(product)); } @Test @WithMockUser(roles = "ADMIN") void testCreateProductAsAdmin() { Product product = new Product(); assertDoesNotThrow(() -> productService.createProduct(product)); } @Test @WithAnonymousUser void testCreateProductAsAnonymous() { Product product = new Product(); assertThrows(AccessDeniedException.class, () -> productService.createProduct(product)); } @Test @WithMockUser(roles = "USER") void testGetProductByIdAsUser() { assertDoesNotThrow(() -> productService.getProductById(1L)); // Assuming product with ID 1 exists } @Test @WithMockUser(roles = "ADMIN") void testGetProductByIdAsAdmin() { assertDoesNotThrow(() -> productService.getProductById(1L)); } @Test @WithAnonymousUser void testGetProductByIdAsAnonymous() { assertThrows(AccessDeniedException.class, () -> productService.getProductById(1L)); } @Test @WithMockUser(roles = "USER") void testUpdateProductAsUser() { Product product = new Product(); assertThrows(AccessDeniedException.class, () -> productService.updateProduct(product)); } @Test @WithMockUser(roles = "ADMIN") void testUpdateProductAsAdmin() { Product product = new Product(); assertDoesNotThrow(() -> productService.updateProduct(product)); } @Test @WithAnonymousUser void testUpdateProductAsAnonymous() { Product product = new Product(); assertThrows(AccessDeniedException.class, () -> productService.updateProduct(product)); } @Test @WithMockUser(roles = "USER") void testDeleteProductAsUser() { assertThrows(AccessDeniedException.class, () -> productService.deleteProduct(1L)); } @Test @WithMockUser(roles = "ADMIN") void testDeleteProductAsAdmin() { assertDoesNotThrow(() -> productService.deleteProduct(1L)); } @Test @WithAnonymousUser void testDeleteProductAsAnonymous() { assertThrows(AccessDeniedException.class, () -> productService.deleteProduct(1L)); } }
هذا كل شيء، الآن يمكنك إدارة وصول المستخدم إلى التطبيق باستخدام الأدوار مع التعليق التوضيحي @Secured.
إذا أعجبك هذا الموضوع، تأكد من متابعتي. في الأيام التالية، سأشرح المزيد عن تعليقات الربيع! ابقوا متابعين!
اتبعني!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3