


Panduan penggunaan rangka kerja kawalan kebenaran Spring Security
Dalam sistem pengurusan bahagian belakang, kawalan kebenaran akses biasanya diperlukan untuk mengehadkan keupayaan pengguna yang berbeza untuk mengakses antara muka. Jika pengguna tidak mempunyai kebenaran khusus, dia tidak boleh mengakses antara muka tertentu.
Artikel ini akan menggunakan projek waynboot-mall sebagai contoh untuk memperkenalkan cara memperkenalkan rangka kerja kawalan kebenaran Spring Security ke dalam sistem pengurusan back-end biasa. Rangkanya adalah seperti berikut:
waynboot-mall alamat projek: https://github.com/wayn111/waynboot-mall
1. Apakah itu Spring Security
Spring Security ialah projek sumber terbuka berdasarkan rangka kerja Spring, direka untuk menyediakan penyelesaian keselamatan yang berkuasa dan fleksibel untuk aplikasi Java. Spring Security menyediakan ciri-ciri berikut:
- Pengesahan: Menyokong pelbagai mekanisme pengesahan, seperti log masuk borang, pengesahan asas HTTP, OAuth2, OpenID, dsb.
- Keizinan: Menyokong kawalan akses berasaskan peranan atau kebenaran, serta kawalan terperinci berasaskan ekspresi.
- Perlindungan: Menyediakan pelbagai langkah perlindungan, seperti mencegah penetapan sesi, rampasan klik, pemalsuan permintaan merentas tapak dan serangan lain.
- Integrasi: Penyepaduan lancar dengan Spring Framework dan perpustakaan dan rangka kerja pihak ketiga yang lain, seperti Spring MVC, Thymeleaf, Hibernate, dsb.
2. Bagaimana untuk memperkenalkan Spring Security
Memperkenalkan secara langsung pergantungan spring-boot-starter-security ke dalam projek waynboot-mall,
org.springframework.boot spring-boot-starter-security 3.1.0
3. Bagaimana untuk mengkonfigurasi Spring Security
Mengkonfigurasi Spring Security dalam Spring Security 3.0 sedikit berbeza daripada sebelumnya, contohnya, ia tidak lagi mewarisi WebSecurityConfigurerAdapter. Dalam projek waynboot-mall, konfigurasi khusus adalah seperti berikut,
@Configuration @EnableWebSecurity @AllArgsConstructor @EnableMethodSecurity(securedEnabled = true, jsr250Enabled = true) public class SecurityConfig { private UserDetailsServiceImpl userDetailsService; private AuthenticationEntryPointImpl unauthorizedHandler; private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter; private LogoutSuccessHandlerImpl logoutSuccessHandler; @Bean public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { httpSecurity // cors启用 .cors(httpSecurityCorsConfigurer -> {}) .csrf(AbstractHttpConfigurer::disable) .sessionManagement(httpSecuritySessionManagementConfigurer -> { httpSecuritySessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS); }) .exceptionHandling(httpSecurityExceptionHandlingConfigurer -> { httpSecurityExceptionHandlingConfigurer.authenticationEntryPoint(unauthorizedHandler); }) // 过滤请求 .authorizeHttpRequests(authorizationManagerRequestMatcherRegistry -> { authorizationManagerRequestMatcherRegistry .requestMatchers("/favicon.ico", "/login", "/favicon.ico", "/actuator/**").anonymous() .requestMatchers("/slider/**").anonymous() .requestMatchers("/captcha/**").anonymous() .requestMatchers("/upload/**").anonymous() .requestMatchers("/common/download**").anonymous() .requestMatchers("/doc.html").anonymous() .requestMatchers("/swagger-ui/**").anonymous() .requestMatchers("/swagger-resources/**").anonymous() .requestMatchers("/webjars/**").anonymous() .requestMatchers("/*/api-docs").anonymous() .requestMatchers("/druid/**").anonymous() .requestMatchers("/elastic/**").anonymous() .requestMatchers("/message/**").anonymous() .requestMatchers("/ws/**").anonymous() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated(); }) .headers(httpSecurityHeadersConfigurer -> { httpSecurityHeadersConfigurer.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable); }); // 处理跨域请求中的Preflight请求(cors),设置corsConfigurationSource后无需使用 // .requestMatchers(CorsUtils::isPreFlightRequest).permitAll() // 对于登录login 验证码captchaImage 允许匿名访问 httpSecurity.logout(httpSecurityLogoutConfigurer -> { httpSecurityLogoutConfigurer.logoutUrl("/logout"); httpSecurityLogoutConfigurer.logoutSuccessHandler(logoutSuccessHandler); }); // 添加JWT filter httpSecurity.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); // 认证用户时用户信息加载配置,注入springAuthUserService httpSecurity.userDetailsService(userDetailsService); return httpSecurity.build(); } @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception { return authenticationConfiguration.getAuthenticationManager(); } /** * 强散列哈希加密实现 */ @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } }
Berikut ialah pengenalan terperinci kepada kelas konfigurasi SecurityConfig:
-
Kaedah
- filterChain(HttpSecurity httpSecurity) ialah kaedah teras kawalan akses Di sini anda boleh menetapkan sama ada pengesahan kebenaran diperlukan untuk url, konfigurasi cors, konfigurasi csrf, konfigurasi pemuatan maklumat pengguna, konfigurasi pemintasan penapis jwt dan banyak fungsi lain. Kaedah
- authenticationManager(AuthenticationConfiguration authenticationConfiguration) sesuai untuk mendayakan antara muka pengesahan dan perlu diisytiharkan secara manual, jika tidak, ralat akan dilaporkan semasa permulaan. Kaedah
- bCryptPasswordEncoder() membenarkan pengguna mentakrifkan dasar penyulitan kata laluan apabila pengguna log masuk. Ia perlu diisytiharkan secara manual, jika tidak, ralat akan dilaporkan semasa permulaan.
4. Cara menggunakan Spring Security
Untuk menggunakan Spring Security, anda hanya perlu menambah anotasi @PreAuthorize yang sepadan pada kaedah atau kelas yang perlu mengawal kebenaran akses, seperti berikut,
@Slf4j @RestController @AllArgsConstructor @RequestMapping("system/role") public class RoleController extends BaseController { private IRoleService iRoleService; @PreAuthorize("@ss.hasPermi('system:role:list')") @GetMapping("/list") public R list(Role role) { Page page = getPage(); return R.success().add("page", iRoleService.listPage(page, role)); } }
Kami menambahkan anotasi @PreAuthorize(“@ss.hasPermi('system:role:list')”) pada kaedah senarai untuk menunjukkan bahawa pengguna yang sedang log masuk mempunyai kebenaran system:role:list untuk mengakses kaedah senarai, jika tidak ralat kebenaran akan dikembalikan.
5. Dapatkan kebenaran pengguna yang sedang log masuk
Dalam kelas konfigurasi SecurityConfig, kami mentakrifkan UserDetailsServiceImpl sebagai kelas pelaksanaan kami untuk memuatkan maklumat pengguna, untuk membandingkan akaun dan kata laluan pengguna dalam pangkalan data dengan akaun dan kata laluan yang dihantar oleh bahagian hadapan. Kodnya adalah seperti berikut,
@Slf4j @Service @AllArgsConstructor public class UserDetailsServiceImpl implements UserDetailsService { private IUserService iUserService; private IDeptService iDeptService; private PermissionService permissionService; public static void main(String[] args) { BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); System.out.println(bCryptPasswordEncoder.encode("123456")); } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 1. 读取数据库中当前用户信息 User user = iUserService.getOne(new QueryWrapper().eq("user_name", username)); // 2. 判断该用户是否存在 if (user == null) { log.info("登录用户:{} 不存在.", username); throw new UsernameNotFoundException("登录用户:" + username + " 不存在"); } // 3. 判断是否禁用 if (Objects.equals(UserStatusEnum.DISABLE.getCode(), user.getUserStatus())) { log.info("登录用户:{} 已经被停用.", username); throw new DisabledException("登录用户:" + username + " 不存在"); } user.setDept(iDeptService.getById(user.getDeptId())); // 4. 获取当前用户的角色信息 Set rolePermission = permissionService.getRolePermission(user); // 5. 根据角色获取权限信息 Set menuPermission = permissionService.getMenuPermission(rolePermission); return new LoginUserDetail(user, menuPermission); } }
Berikut ialah penjelasan tentang logik kod UserDetailsServiceImpl, supaya anda boleh memahaminya dengan bantuan kod tersebut.
- Baca maklumat pengguna semasa dalam pangkalan data
- Tentukan sama ada pengguna itu wujud
- Tentukan sama ada untuk melumpuhkan
- Dapatkan maklumat peranan pengguna semasa
- Dapatkan maklumat kebenaran berdasarkan peranan
Untuk meringkaskan
Artikel ini menerangkan kepada anda cara memperkenalkan rangka kerja kawalan kebenaran versi Spring Security 3.0 ke dalam sistem pengurusan bahagian belakang dan amalan kod. Saya percaya ia boleh membantu semua orang mempunyai pemahaman yang jelas tentang rangka kerja kawalan kebenaran Spring Security. Kemudian, anda boleh mengikuti panduan penggunaan dalam artikel ini untuk memperkenalkan Spring Security ke dalam projek anda sendiri langkah demi langkah untuk kawalan akses.
Atas ialah kandungan terperinci Panduan penggunaan rangka kerja kawalan kebenaran Spring Security. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Apa itu zlib1.dll? Sesetengah orang menemui ralat "zlib1.dll hilang" atau zlib1.dll tidak dijumpai ralat apabila mereka cuba membuka aplikasi yang termasuk zlib1.dll. Untuk memperbaiki kesilapan yang berkaitan ini, artikel ini di laman web php.cn dapat memberi anda beberapa i

Sesetengah daripada anda mungkin mendapati bahawa Autofill tidak berfungsi di Excel. Bolehkah anda membuat sebarang penyelesaian mengenai perkara itu? Jika tidak, maka anda telah datang ke tempat yang betul. Siaran ini di laman web php.cn akan memberi anda 6 cara untuk menyelesaikan Excel Autofill tidak berfungsi.

Apakah edisi starter Windows 7? Apakah batasan edisi starter Windows 7? Bagaimana untuk mendapatkan edisi starter Windows 7 ISO? Siaran ini dari Php.CN menyediakan maklumat terperinci mengenai edisi starter Windows 7 untuk anda.

Apabila menjalankan aplikasi, adakah anda bermasalah dengan menukar akaun dengan log keluar dari yang ada sekarang dan kemudian log masuk ke yang lain? Php.cn telah mengumpulkan beberapa cara yang berkesan untuk membantu anda menjalankan aplikasi sebagai pengguna yang berbeza di Windows 10 dan Windows 11.

Adakah anda menderita "Dropbox ada ralat yang memuat turun fail anda" di Windows? Sekarang baca siaran ini yang diberikan oleh php.cn untuk mendapatkan beberapa penyelesaian berguna untuk masalah ini.

Adakah anda bermasalah dengan masalah "fail yang dipilih tidak diserlahkan dalam File Explorer"? Adakah anda tahu bagaimana membetulkannya? Jika tidak, anda boleh membaca siaran ini di Php.cn untuk mendapatkan beberapa penyelesaian yang boleh dilaksanakan untuk membuat fail terpilih kelihatan dalam File Explorer.

Bar bahasa adalah penting jika anda bekerja dengan multilanguage. Anda boleh menukar bahasa input dengan tweaking tetapan dari bar tugas. Tetapi bar bahasa mungkin hilang satu hari apabila anda membuka komputer. Cara membetulkan bar bahasa yang hilang dari

Mahu menggunakan pemacu luaran untuk mengembangkan storan telefon anda? Adalah mungkin untuk melakukan ini. Pos Php.cn ini menunjukkan kepada anda panduan bagaimana untuk menyambungkan pemacu luaran ke telefon. Selain itu, jika anda perlu memulihkan data dari pemacu luaran anda, anda boleh mencuba 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

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.