Kaedah keselamatan dengan Anotasi @Secured pada Musim Bunga
Anotasi ini menyediakan cara untuk menambahkan konfigurasi keselamatan pada kaedah perniagaan.
Ia akan menggunakan peranan untuk menyemak sama ada pengguna mempunyai kebenaran untuk memanggil kaedah ini. Anotasi adalah sebahagian daripada keselamatan musim bunga. Jadi untuk mendayakan penggunaannya, anda memerlukan pergantungan keselamatan musim bunga.
Contoh Senario
Anda mempunyai aplikasi yang mempunyai CRUD produk. Dalam CRUD ini anda ingin mengawal operasi menggunakan dua peranan khusus.
- Pengguna: boleh mencipta produk dan melihat produk. Tetapi tidak boleh mengemas kini atau memadamkan produk.
- Pentadbir: yang boleh melakukan semua operasi pengguna dan juga boleh mengemas kini serta memadam produk.
Anda boleh menggunakan @Secured untuk mengurus akses peranan tersebut pada setiap operasi.
Peranan untuk Operasi
Kami boleh menentukan peranan berikut dalam senario contoh kami.
- ROLE_USER, ROLE_ADMIN
Untuk membaca:
- ROLE_USER, ROLE_ADMIN
Untuk mengemas kini:
- PERANAN_ADMIN
Untuk memadam:
- PERANAN_ADMIN
Mari kita lihat contoh kod dan perhatikan gelagat aplikasi.
Menambah Kebergantungan Keselamatan Musim Bunga
Untuk bekerja dengan anotasi @Secured, tambahkan kebergantungan Maven untuk Spring Security:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Kaedah Anotasi dengan @Secured
Kami menganotasi kaedah dengan @Secured menentukan peranan yang boleh mengakses kelakuan kaedah.
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 } }
Konfigurasi aplikasi
Anda perlu menambah @EnableGlobalMethodSecurity(securedEnabled = true) untuk mengkonfigurasi aplikasi Spring anda untuk menggunakan mendayakan keselamatan kaedah menggunakan @Secured.
@SpringBootApplication @EnableTransactionManagement @EnableGlobalMethodSecurity(securedEnabled = true) public class MasteryApplication { public static void main(String[] args) { SpringApplication.run(MasteryApplication.class, args); } }
Menguji Tingkah Laku
Dalam contoh kami, kami akan menguji tingkah laku menggunakan ujian, jadi kami menambah kebergantungan ujian but spring.
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency>
Kemudian kami membuat ujian untuk mengesahkan jika menggunakan pengguna olok-olok dan memberikan peranan khusus kepadanya, kami boleh menguji pengguna dalam setiap peranan dan cara aplikasi kami berkelakuan. Dengan berbuat demikian, kami dapat memastikan bahawa hanya peranan yang betul boleh melakukan tindakan yang dibenarkan.
@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)); } }
Itu sahaja, kini anda boleh mengurus akses pengguna kepada aplikasi menggunakan peranan dengan anotasi @Secured.
Jika anda suka topik ini, pastikan anda mengikuti saya. Pada hari-hari berikutnya, saya akan menerangkan lebih lanjut tentang anotasi Spring! Nantikan!
Ikuti saya!
Atas ialah kandungan terperinci Kaedah keselamatan dengan Anotasi @Secured pada Musim Bunga. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...
