Pembangunan backend Java: Keselamatan API menggunakan Spring Security

WBOY
Lepaskan: 2023-06-17 09:52:01
asal
1672 orang telah melayarinya

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!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!