Rumah pembangunan bahagian belakang tutorial php Pembangunan backend Java: Keselamatan API menggunakan Spring Security

Pembangunan backend Java: Keselamatan API menggunakan Spring Security

Jun 17, 2023 am 09:49 AM
bahagian belakang java keselamatan api spring security

Dengan pertumbuhan aplikasi web moden, API telah menjadi bahagian penting dalam pembangunan web. API ini boleh dipanggil oleh peranti mudah alih, aplikasi web dan perkhidmatan lain, jadi keselamatan API menjadi kritikal. Dalam pembangunan backend Java, Spring Security ialah pilihan popular yang menyediakan rangka kerja yang berkuasa untuk melindungi dan mengurus keselamatan API.

Spring Security ialah rangka kerja yang berkuasa dan fleksibel yang boleh membantu API melindungi data pengguna dengan lebih selamat. Ia berdasarkan rangka kerja Spring, mempunyai mekanisme keselamatan, dan menyediakan banyak ciri keselamatan, seperti pengesahan, kebenaran, log masuk tunggal, pengurusan kata laluan, dsb. Dalam artikel ini, kami akan menumpukan pada cara menggunakan Spring Security dalam bahagian belakang Java untuk menjamin API anda.

Menggunakan Spring Security untuk melaksanakan keselamatan API mempunyai langkah-langkah berikut:

  1. Mengkonfigurasi Spring Security

Bahagian paling penting dalam mengkonfigurasi Spring Security ialah SecurityConfig kelas. Dalam kelas ini, kita perlu menentukan URL mana yang perlu diurus dengan selamat dan URL mana yang perlu dikeluarkan. Kami juga boleh mentakrifkan mekanisme pengesahan dan kebenaran di sini.

Kod sampel:

@Configuration
@EnableWebSecurity
kelas awam SecurityConfig memanjangkan WebSecurityConfigurerAdapter {
@Autowired
private AuthUserDetails>

pribadi AuthUserDetailsService Autowired

peribadi CustomAuthenticationProvider authProvider;

@Override

public void configure(AuthenticationManagerBuilder auth) melontar Exception {

   auth.authenticationProvider(authProvider);
   auth.userDetailsService(userDetailsService);
Salin selepas log masuk

}

🎜>

🎜>Override void configure(HttpSecurity http) membuang Exception {

   http.authorizeRequests()
       .antMatchers("/admin/**").hasAuthority("ADMIN")
       .antMatchers("/api/**").authenticated()
       .and()
       .csrf().disable()
       .formLogin().disable()
       .httpBasic();
Salin selepas log masuk

}

}

Dalam kod contoh di atas, kami mentakrifkan kelas SecurityConfig, yang mewarisi kelas WebSecurityConfigurerAdapter yang disediakan oleh Spring. Kami menggunakan anotasi @Autowired untuk menyuntik userDetailsService dan authProvider kami sendiri untuk mengesahkan maklumat pengguna. Dalam kaedah configure(), kami menentukan URL yang perlu diurus dengan selamat, contohnya: /admin/

memerlukan kebenaran ADMIN untuk mengakses, /api/ memerlukan pengesahan sebelum akses.

    Melaksanakan pengesahan tersuai
Pengesahan selalunya merupakan salah satu bahagian paling kompleks dalam aplikasi Spring. Mekanisme pengesahan tersuai rangka kerja Spring Security membolehkan kami melaksanakan pengesahan dengan mudah dalam aplikasi kami.

Kami boleh menyesuaikan logik pengesahan dengan mengatasi kaedah pengesahan (Authentication authentication) antara muka AuthenticationProvider. Kod sampel adalah seperti berikut:

CustomAuthenticationProvider kelas awam melaksanakan AuthenticationProvider {

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
         String username = authentication.getName();
         String password = authentication.getCredentials().toString();

         AuthUserDetails user = userDetailsService.loadUserByUsername(username);

         if (!passwordEncoder.matches(password, user.getPassword())) {
               throw new BadCredentialsException("Invalid username or password");
         }

         List<GrantedAuthority> authorities = new ArrayList<>();
         for (AuthRole role : user.getAuthorities()) {
               authorities.add(new SimpleGrantedAuthority(role.getRoleName()));
         }

         return new UsernamePasswordAuthenticationToken(user.getUsername(), null, authorities);
   }

  @Override
  public boolean supports(Class<?> authentication) {
         return authentication.equals(UsernamePasswordAuthenticationToken.class);
  }
Salin selepas log masuk

}

Dalam kod di atas, kami menerangkan logik pengesahan tersuai baris demi baris. Mula-mula dapatkan maklumat pengesahan pengguna yang masuk, dan kemudian sahkan melalui perkhidmatan pengesahan tersuai. Jika nama pengguna dan kata laluan adalah betul, objek Pengesahan akan dikembalikan, jika tidak BadCredentialsException akan dilemparkan. Akhir sekali, jika pengesahan berjaya, objek UsernamePasswordAuthenticationToken akan dikembalikan dan Spring Security akan menggunakan objek ini untuk pemprosesan pengesahan dan kebenaran seterusnya.

    Melaksanakan mekanisme kebenaran peranan
Kami boleh menggunakan anotasi @PreAuthorize dalam Spring Security untuk menentukan peranan yang boleh mengakses sumber mana. Dalam anotasi ini kita boleh mentakrifkan peranan yang kita takrifkan dalam kelas SecurityConfig.

Kod sampel:

@RestController

@RequestMapping("/api/v1/users")
UserController kelas awam {

@Autowired
private UserService userService;

@GetMapping("/")
@PreAuthorize("hasAuthority('USER')")
public List<UserDTO> getUsers() {
    List<User> users = userService.getUsers();
    return UserMapper.toDtos(users);
}

@PostMapping("/")
@PreAuthorize("hasAuthority('ADMIN')")
public void createUser(@RequestBody UserDTO userDTO) {
    User user = UserMapper.toEntity(userDTO);
    userService.createUser(user);
}
Salin selepas log masuk

}

Dalam kod di atas, kami mentakrifkan kelas pengawal pengguna, yang mengandungi dua kaedah getUser() dan createUser() untuk kebenaran keselamatan melalui @PreAuthorize anotasi. Anotasi @PreAuthorize kaedah getUser() ialah 'hasAuthority('USER')', yang sepadan dengan peranan yang ditakrifkan dalam kelas SecurityConfig. Begitu juga, anotasi @PreAuthorize kaedah createUser() ialah 'hasAuthority('ADMIN')', yang sepadan dengan peranan yang ditakrifkan dalam kelas SecurityConfig.

Kesimpulan:

Keselamatan API boleh dicapai dengan mudah menggunakan rangka kerja Keselamatan Musim Bunga. Dengan menyesuaikan mekanisme pengesahan dan keizinan peranan, kami boleh menjadikan aplikasi lebih selamat. Apabila menggunakan Spring Security untuk pengurusan keselamatan API, anda perlu mempertimbangkan keperluan keselamatan aplikasi, dan kemudian secara beransur-ansur mengkonfigurasi dan melaksanakannya mengikut keperluan.

Atas ialah kandungan terperinci Pembangunan backend Java: Keselamatan API menggunakan 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
3 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("

Cara membangunkan sistem log masuk tunggal berasaskan SAML Spring Security menggunakan Java Cara membangunkan sistem log masuk tunggal berasaskan SAML Spring Security menggunakan Java Sep 22, 2023 am 08:49 AM

Cara menggunakan Java untuk membangunkan sistem log masuk tunggal berdasarkan SpringSecuritySAML Pengenalan: Dengan perkembangan pesat Internet, semakin banyak aplikasi dibangunkan. Dalam aplikasi ini, log masuk pengguna adalah salah satu ciri yang paling biasa. Walau bagaimanapun, untuk aplikasi peringkat perusahaan, pengguna perlu log masuk dalam berbilang sistem, yang akan membawa kepada pengalaman log masuk pengguna yang sangat lemah. Untuk menyelesaikan masalah ini, sistem log masuk tunggal (SingleSign-On, dirujuk sebagai SSO) telah wujud. ringkas

Apakah lima pilihan untuk memilih laluan kerjaya Java yang paling sesuai dengan anda? Apakah lima pilihan untuk memilih laluan kerjaya Java yang paling sesuai dengan anda? Jan 30, 2024 am 10:35 AM

Terdapat lima arah pekerjaan dalam industri Java, yang manakah sesuai untuk anda? Java, sebagai bahasa pengaturcaraan yang digunakan secara meluas dalam bidang pembangunan perisian, sentiasa popular. Disebabkan sifat merentas platform yang kukuh dan rangka kerja pembangunan yang kaya, pembangun Java mempunyai pelbagai peluang pekerjaan dalam pelbagai industri. Dalam industri Java, terdapat lima arah pekerjaan utama, termasuk pembangunan JavaWeb, pembangunan aplikasi mudah alih, pembangunan data besar, pembangunan terbenam dan pembangunan pengkomputeran awan. Setiap arah mempunyai ciri-ciri dan kelebihannya Lima arah akan dibincangkan di bawah.

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

Pembangunan Bahagian Belakang Java: Membina API Reaktif dengan Akka HTTP Pembangunan Bahagian Belakang Java: Membina API Reaktif dengan Akka HTTP Jun 17, 2023 am 11:09 AM

Pengaturcaraan reaktif menjadi semakin penting dalam pembangunan web hari ini. AkkaHTTP ialah rangka kerja HTTP berprestasi tinggi berdasarkan Akka, sesuai untuk membina API gaya REST reaktif. Artikel ini akan memperkenalkan cara menggunakan AkkaHTTP untuk membina API reaktif, sambil memberikan beberapa contoh praktikal. Mari mulakan! Mengapa memilih AkkaHTTP Apabila membangunkan API reaktif, adalah penting untuk memilih rangka kerja yang betul. AkkaHTTP adalah pilihan yang sangat baik kerana

Panduan penggunaan rangka kerja kawalan kebenaran Spring Security Panduan penggunaan rangka kerja kawalan kebenaran Spring Security Feb 18, 2024 pm 05:00 PM

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 SpringSecurity ke dalam sistem pengurusan back-end biasa. Garis besarnya adalah seperti berikut: alamat projek waynboot-mall: https://github.com/wayn111/waynboot-mall 1. Apakah SpringSecurity SpringSecurity ialah projek sumber terbuka berdasarkan rangka kerja Spring, bertujuan untuk menyediakan keselamatan yang berkuasa dan fleksibel untuk aplikasi Java.

Bagaimana untuk menyelesaikan masalah transaksi pangkalan data dalam pembangunan fungsi back-end Java? Bagaimana untuk menyelesaikan masalah transaksi pangkalan data dalam pembangunan fungsi back-end Java? Aug 04, 2023 pm 07:45 PM

Bagaimana untuk menyelesaikan masalah transaksi pangkalan data dalam pembangunan fungsi back-end Java? Dalam pembangunan fungsi back-end Java, fungsi yang melibatkan operasi pangkalan data adalah sangat biasa. Dalam operasi pangkalan data, urus niaga adalah konsep yang sangat penting. Transaksi ialah unit logik yang terdiri daripada urutan operasi pangkalan data yang sama ada dilaksanakan sepenuhnya atau tidak dilaksanakan sama sekali. Dalam aplikasi praktikal, kita selalunya perlu memastikan bahawa satu set operasi pangkalan data yang berkaitan sama ada semuanya berjaya dilaksanakan atau semuanya digulung semula untuk mengekalkan ketekalan dan kebolehpercayaan data. Jadi, bagaimana untuk membangunkan di backend Java

Bagaimana untuk mengendalikan permintaan merentas domain dalam pembangunan fungsi backend Java? Bagaimana untuk mengendalikan permintaan merentas domain dalam pembangunan fungsi backend Java? Aug 05, 2023 am 09:40 AM

Bagaimana untuk mengendalikan permintaan merentas domain dalam pembangunan fungsi backend Java? Dalam model pembangunan di mana bahagian hadapan dan bahagian belakang dipisahkan, ia adalah senario yang sangat biasa bagi bahagian hadapan untuk menghantar permintaan kepada antara muka API bahagian belakang untuk mendapatkan data melalui JavaScript. Walau bagaimanapun, disebabkan dasar asal yang sama penyemak imbas, terdapat sekatan pada permintaan merentas domain. Permintaan merentas domain bermakna halaman akhir hadapan meminta pelayan dengan nama domain yang berbeza, port yang berbeza atau protokol yang berbeza melalui AJAX dan kaedah lain. Artikel ini akan memperkenalkan kaedah biasa untuk mengendalikan permintaan merentas domain dalam pembangunan fungsi back-end Java, dengan contoh kod. Selesaikan merentas domain

See all articles