


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!

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

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



我有下面的代码:publicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{returnhttp.httpBasic().disable().cors().and().csrf().disable().authorizeHttpRequests().requestMatchers("

Kernelsecuritycheckfailure (kegagalan pemeriksaan kernel) adalah jenis kod henti yang agak biasa Walau bagaimanapun, tidak kira apa sebabnya, ralat skrin biru menyebabkan ramai pengguna merasa tertekan dengan berhati-hati. 17 penyelesaian kepada skrin biru kernel_security_check_failure Kaedah 1: Alih keluar semua peranti luaran Apabila mana-mana peranti luaran yang anda gunakan tidak serasi dengan versi Windows anda, ralat skrin biru Kernelsecuritycheckfailure mungkin berlaku. Untuk melakukan ini, anda perlu mencabut semua peranti luaran sebelum cuba memulakan semula komputer anda.

Pada tahun 2023, teknologi AI telah menjadi topik hangat dan memberi impak besar kepada pelbagai industri, terutamanya dalam bidang pengaturcaraan. Orang ramai semakin menyedari kepentingan teknologi AI, dan komuniti Spring tidak terkecuali. Dengan kemajuan berterusan teknologi GenAI (General Artificial Intelligence), ia menjadi penting dan mendesak untuk memudahkan penciptaan aplikasi dengan fungsi AI. Dengan latar belakang ini, "SpringAI" muncul, bertujuan untuk memudahkan proses membangunkan aplikasi berfungsi AI, menjadikannya mudah dan intuitif serta mengelakkan kerumitan yang tidak perlu. Melalui "SpringAI", pembangun boleh membina aplikasi dengan lebih mudah dengan fungsi AI, menjadikannya lebih mudah untuk digunakan dan dikendalikan.

Sebagai peneraju industri, Spring+AI menyediakan penyelesaian terkemuka untuk pelbagai industri melalui API yang berkuasa, fleksibel dan fungsi lanjutannya. Dalam topik ini, kami akan menyelidiki contoh aplikasi Spring+AI dalam pelbagai bidang Setiap kes akan menunjukkan cara Spring+AI memenuhi keperluan khusus, mencapai matlamat dan meluaskan LESSONSLEARNED ini kepada rangkaian aplikasi yang lebih luas. Saya harap topik ini dapat memberi inspirasi kepada anda untuk memahami dan menggunakan kemungkinan Spring+AI yang tidak terhingga dengan lebih mendalam. Rangka kerja Spring mempunyai sejarah lebih daripada 20 tahun dalam bidang pembangunan perisian, dan sudah 10 tahun sejak versi Spring Boot 1.0 dikeluarkan. Sekarang, tiada siapa boleh mempertikaikan Spring itu

Cara melaksanakan transaksi terprogram musim bunga: 1. Gunakan TransactionTemplate 2. Gunakan TransactionCallback dan TransactionCallbackWithoutResult 3. Gunakan anotasi Transaksional;

Saya cuba melaksanakan pengesahan token akses menggunakan GO. Tetapi contoh yang saya lihat dalam talian nampaknya hanya menggunakan TOKEN_SECRET untuk mengesahkannya. Tetapi saya sudah biasa dengan pengaturcaraan dalam Javaspring dan tidak perlu menggunakan TOKEN_SECRET. Saya hanya menyediakan jwk-set-uri dan ia menyemak kesahihan (penapis keselamatan automatik dsb.) dan saya tahu ia bercakap dengan pelayan oauth dan melakukan pengesahan ini. Adakah tiada perpustakaan dalam Go untuk menyemak sama ada token itu sah dengan membuat permintaan kepada pelayan oauth? Saya tahu saya tahu saya boleh melakukan ini secara manual dengan membuat permintaan ke titik akhir info pengguna pelayan oauth: http://localh

Cara menetapkan tahap pengasingan transaksi dalam Spring: 1. Gunakan anotasi @Transactional 2. Tetapkan dalam fail konfigurasi Spring 3. Gunakan PlatformTransactionManager 4. Tetapkan dalam kelas konfigurasi Java. Pengenalan terperinci: 1. Gunakan anotasi @Transactional, tambah anotasi @Transactional pada kelas atau kaedah yang memerlukan pengurusan transaksi dan tetapkan tahap pengasingan dalam atribut 2. Dalam fail konfigurasi Spring, dsb.

Pengenalan API RESTful telah menjadi sebahagian daripada aplikasi WEB moden. Mereka menyediakan pendekatan piawai untuk mencipta dan menggunakan perkhidmatan Web, dengan itu meningkatkan kemudahalihan, kebolehskalaan dan kemudahan penggunaan. Dalam ekosistem Java, JAX-RS dan springmvc ialah dua rangka kerja yang paling popular untuk membina API RESTful. Artikel ini akan melihat secara mendalam kedua-dua rangka kerja, membandingkan ciri, kelebihan dan keburukannya untuk membantu anda membuat keputusan termaklum. JAX-RS: JAX-RSAPI JAX-RS (JavaAPI untuk Perkhidmatan Web RESTful) ialah JAX-RSAPI standard yang dibangunkan oleh JavaEE untuk membangunkan REST
