Jadual Kandungan
1. Apakah itu Spring Security
2. Bagaimana untuk memperkenalkan Spring Security
3. Bagaimana untuk mengkonfigurasi Spring Security
4. Cara menggunakan Spring Security
5. Dapatkan kebenaran pengguna yang sedang log masuk
Untuk meringkaskan
Rumah tutorial komputer pengetahuan komputer Panduan penggunaan rangka kerja kawalan kebenaran Spring Security

Panduan penggunaan rangka kerja kawalan kebenaran Spring Security

Feb 18, 2024 pm 05:00 PM
spring security spring security spring mvc waynboot

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

Salin selepas log masuk

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();
}
}
Salin selepas log masuk

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));
}
}
Salin selepas log masuk

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);
}
}
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Spring Security 6: cors() ditamatkan dan ditandakan untuk dialih keluar Spring Security 6: cors() ditamatkan dan ditandakan untuk dialih keluar Feb 10, 2024 pm 11:45 PM

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

17 cara untuk menyelesaikan skrin biru kernel_security_check_failure 17 cara untuk menyelesaikan skrin biru kernel_security_check_failure Feb 12, 2024 pm 08:51 PM

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.

Paradigma pengaturcaraan baharu, apabila Spring Boot bertemu OpenAI Paradigma pengaturcaraan baharu, apabila Spring Boot bertemu OpenAI Feb 01, 2024 pm 09:18 PM

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.

Gunakan Spring Boot dan Spring AI untuk membina aplikasi kecerdasan buatan generatif Gunakan Spring Boot dan Spring AI untuk membina aplikasi kecerdasan buatan generatif Apr 28, 2024 am 11:46 AM

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

Apakah kaedah pelaksanaan transaksi program musim bunga? Apakah kaedah pelaksanaan transaksi program musim bunga? Jan 08, 2024 am 10:23 AM

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

GO sahkan token akses (kunci kunci) GO sahkan token akses (kunci kunci) Feb 09, 2024 am 09:30 AM

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 Cara menetapkan tahap pengasingan transaksi dalam Spring Jan 26, 2024 pm 05:38 PM

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.

JAX-RS lwn. Spring MVC: Pertempuran antara gergasi RESTful JAX-RS lwn. Spring MVC: Pertempuran antara gergasi RESTful Feb 29, 2024 pm 05:16 PM

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

See all articles