Dengan perkembangan Internet, semakin banyak aplikasi memerlukan kawalan keselamatan. Spring Security ialah rangka kerja sumber terbuka yang menyediakan keupayaan pengesahan dan kebenaran yang boleh disepadukan ke dalam pelbagai aplikasi Java. Artikel ini akan meneroka cara menggunakan Spring Security untuk kawalan keselamatan dalam pembangunan API Java.
1. Apakah itu Spring Security
Spring Security ialah rangka kerja lanjutan untuk kawalan keselamatan dalam rangka Spring. Ia menyediakan beberapa fungsi keselamatan biasa, seperti pengesahan pengguna, kebenaran dan perlindungan terhadap serangan biasa. Spring Security dipanggil Acegi Security pada awalnya dan telah dibangunkan oleh Acegi Technology Ia kemudiannya diperoleh oleh SpringSource (kini VMware) dan menjadi projek sumber terbuka SpringSource. Spring Security boleh dikembangkan dan fleksibel serta boleh digunakan dengan pelbagai kaedah pengesahan (seperti berasaskan borang, CAS, LDAP, OpenID, dll.). Dalam artikel ini, kami akan memperkenalkan kaedah pengesahan berasaskan borang.
2. Prinsip asas Keselamatan Musim Bunga
Keselamatan Musim Bunga melaksanakan kawalan keselamatan berdasarkan teknologi Servlet dan Penapis. Ia memintas permintaan pelanggan melalui rantaian penapis dan mengesahkan serta membenarkannya. Penapis yang paling biasa digunakan dalam Spring Security ialah DelegatingFilterProxy, yang boleh menyerahkan permintaan pelanggan kepada FilterChainProxy Spring Security untuk diproses. FilterChainProxy Spring Security bertanggungjawab untuk memilih FilterChain yang sepadan untuk pemprosesan berdasarkan peraturan padanan URL permintaan. Setiap FilterChain mengandungi satu set Penapis, dan setiap Penapis bertanggungjawab untuk melaksanakan operasi kawalan keselamatan tertentu, seperti pengesahan identiti, kebenaran, mencegah serangan CSRF, dsb.
3. Konfigurasi Spring Security
Berikut ialah contoh penggunaan fail konfigurasi Spring Security:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER") .and() .withUser("admin").password("{noop}password").roles("USER", "ADMIN"); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin() .and() .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login"); } }
Fail konfigurasi di atas mentakrifkan dua nama pengguna dan kata laluan, dan Peranan yang sepadan. Antaranya, {noop} bermaksud menggunakan storan kata laluan teks biasa. Dalam pembangunan sebenar, adalah disyorkan untuk menggunakan algoritma penyulitan untuk menyulitkan dan menyimpan kata laluan. Untuk pengesahan dan kebenaran, kami boleh menggunakan kaedah authorizeRequests untuk konfigurasi. Dalam konfigurasi di atas, permintaan untuk mengakses /admin/** hanya boleh diakses oleh pengguna yang mempunyai peranan ADMIN. Untuk sebarang permintaan lain, hanya pengesahan diperlukan. Spring Security juga menyediakan fungsi pengesahan borang Kami mengkonfigurasinya dengan memanggil kaedah formLogin dan menggunakan kaedah log keluar untuk melaksanakan fungsi log keluar.
4. Gunakan Spring Security untuk pengesahan dan kebenaran
Berikut ialah contoh kod yang merangkumi pengesahan dan kebenaran:
@RestController @RequestMapping("/api") public class ApiController { @GetMapping("/hello") public String hello() { return "Hello, world!"; } @GetMapping("/admin") public String admin() { return "Welcome, admin!"; } }
Kod di atas mengandungi Hello World API dan An API yang memerlukan keistimewaan pentadbir. Untuk menggunakan Spring Security untuk melaksanakan kawalan keselamatan pada API ini, kami perlu mencipta kelas yang mewarisi daripada WebSecurityConfigurerAdapter dan melaksanakan kaedah konfigurasi:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/api/admin").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER") .and() .withUser("admin").password("{noop}password").roles("USER", "ADMIN"); } }
Dalam kod di atas, kami menggunakan kaedah inMemoryAuthentication Spring Security untuk mencipta dua pengguna , seorang menggunakan peranan USER dan yang lain menggunakan peranan ADMIN dan USER. Dalam kaedah konfigurasi, kami menggunakan kaedah authorizeRequests untuk mengkonfigurasi API /api/admin untuk hanya membenarkan akses kepada pengguna dengan peranan ADMIN dan menggunakan anyRequest untuk mengkonfigurasi bahawa sebarang permintaan lain memerlukan pengesahan. Akhir sekali, kami mengkonfigurasi fungsi pengesahan borang menggunakan kaedah formLogin.
Selepas menggunakan konfigurasi di atas, apabila pengguna mengakses API yang memerlukan pengesahan identiti, Spring Security akan mengubah hala ke halaman log masuk lalai Selepas memasukkan nama pengguna dan kata laluan yang betul, mereka boleh mendapatkan kebenaran dan mengakses API itu memerlukan kebenaran.
5. Ringkasan
Artikel ini memperkenalkan cara menggunakan Spring Security untuk kawalan keselamatan dalam pembangunan API Java, dan menerangkan secara terperinci prinsip asas, konfigurasi dan penggunaan Spring Security. Spring Security ialah rangka kerja keselamatan yang berkuasa, mudah digunakan, fleksibel dan boleh diperluaskan yang menyediakan fungsi pengesahan identiti dan kebenaran lengkap untuk aplikasi Java. Ia bernilai kajian dan aplikasi yang mendalam oleh pengaturcara.
Atas ialah kandungan terperinci Menggunakan SpringSecurity untuk kawalan keselamatan dalam pembangunan API Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!