このアノテーションは、ビジネス メソッドにセキュリティ構成を追加する方法を提供します。
ロールを使用して、ユーザーがこのメソッドを呼び出す権限を持っているかどうかを確認します。注釈は Spring セキュリティの一部です。したがって、その使用を有効にするには、Spring セキュリティ依存関係が必要です。
製品 CRUD を含むアプリケーションがあります。この CRUD では、2 つの特定のロールを使用して操作を制御したいと考えています。
@Secured を使用して、各操作でこれらのロールのアクセスを管理できます。
このシナリオ例では、次のロールを定義できます。
読むには:
更新するには:
削除するには:
コード例を見て、アプリケーションの動作を観察してみましょう。
@Secured アノテーションを使用するには、Spring Security の Maven 依存関係を追加します。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
どのロールがメソッドの動作にアクセスできるかを定義する @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 } }
@Secured を使用してイネーブル メソッド セキュリティを使用するように Spring アプリケーションを構成するには、@EnableGlobalMethodSecurity(securedEnabled = true) を追加する必要があります。
@SpringBootApplication @EnableTransactionManagement @EnableGlobalMethodSecurity(securedEnabled = true) public class MasteryApplication { public static void main(String[] args) { SpringApplication.run(MasteryApplication.class, args); } }
この例では、テストを使用して動作をテストするので、Spring Boot テストの依存関係を追加します。
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency>
次に、模擬ユーザーを使用しているかどうかを検証するテストを作成し、そのユーザーに特定のロールを割り当てます。各ロールのユーザーとアプリケーションの動作をテストできます。そうすることで、適切なロールのみが許可されたアクションを実行できるようにすることができます。
@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 アノテーションが付いたロールを使用して、アプリケーションへのユーザー アクセスを管理できるようになりました。
このトピックが気に入ったら、ぜひフォローしてください。次の日では、Spring アノテーションについて詳しく説明します。乞うご期待!
フォローしてください!
以上がSpring の @Secured アノテーションを使用したメソッドのセキュリティの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。