Farih.co.id
Home Programming Cara Mengamankan Aplikasi Pegas Anda Dengan Keamanan Pegas

Cara Mengamankan Aplikasi Pegas Anda Dengan Keamanan Pegas

a lock on laptop keyboard

Kerangka kerja Spring Security mengamankan aplikasi Anda melalui autentikasi dan otorisasi. Dalam keadaan defaultnya, Spring Security memastikan bahwa setiap jalur permintaan HTTP (atau halaman) di aplikasi Anda memerlukan autentikasi dari satu pengguna global.


VIDEO MUO HARI INI

GULIR UNTUK LANJUTKAN DENGAN KONTEN

Framework ini juga sangat fleksibel. Ini memungkinkan Anda membuat aturan keamanan khusus untuk setiap jalur permintaan HTTP di aplikasi Anda, serta pengguna yang berbeda. Jadi, Anda dapat menghapus batasan keamanan pada halaman yang tidak memerlukan otorisasi pengguna (seperti halaman beranda). Dan atur peran dan otoritas jenis pengguna tertentu.


Menambahkan Keamanan Pegas ke Aplikasi Anda

Ada dua cara untuk menambahkan Spring Security ke aplikasi Anda. Anda dapat memilihnya sebagai dependensi saat membuat aplikasi Spring Boot baru menggunakan Spring initializr, atau menambahkannya ke file spesifikasi build di bagian dependensi setelah membuat proyek Anda.

Jika Anda memilih salah satu opsi proyek Gradle, maka file dependensinya adalah build.gradle. Namun, jika Anda memilih Maven, maka file tersebut adalah pom.xml.

Milikmu build.gradle file harus berisi ketergantungan berikut:

 dependencies {
      implementation 'org.springframework.boot:spring-boot-starter-security'
}

Sementara pom.xml file harus berisi ketergantungan berikut:

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Contoh aplikasi yang digunakan dalam artikel tersedia di sini repositori GitHub dan gratis untuk Anda gunakan di bawah lisensi MIT.

Menggunakan Keamanan Musim Semi

Setelah Anda menambahkan dependensi Spring Security ke aplikasi Anda, Anda dapat segera mulai menggunakan framework. Cukup jalankan aplikasi Anda lalu navigasikan ke halaman beranda Spring Boot (atau halaman apa pun di aplikasi Anda). Contoh aplikasi menggunakan pengontrol awal berikut untuk mengontrol default Spring Boot host lokal:8080 meminta:

 package com.springSecurityDemo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WebController {
   
     @GetMapping("https://www.makeuseof.com/")
      public String home() {
           return "Welcome!";
      }
}

Mengeksekusi aplikasi Anda setelah menambahkan kelas pengontrol tunggal di atas menghasilkan tampilan awal berikut:

Halaman masuk Keamanan Musim Semi

Anda akan melihat bahwa secara otomatis mengarahkan Anda ke localhost:8080/masuk halaman, dan ini dilakukan sebelum memungkinkan Anda untuk mengakses halaman aplikasi lainnya. Pada tahap ini, Anda harus memberikan nama pengguna default (yaitu pengguna) dan kata sandi yang dibuat secara otomatis (yang akan Anda temukan di konsol). Konsol akan menghasilkan garis seperti berikut:

 Using generated security password: c4070465-4c65-4e72-8c3f-3800e631ba81 

Setiap kali Anda memulai ulang aplikasi, kata sandi yang dibuat secara otomatis akan berubah, tetapi nama pengguna akan tetap sama. Memasukkan nama pengguna dan kata sandi default akan mengarahkan Anda ke tampilan yang sesuai di aplikasi Anda.

Menyesuaikan Keamanan Musim Semi

Untuk menyesuaikan keamanan aplikasi Anda, Anda harus mengganti konfigurasi default Spring Security. Namun sebelum itu (dengan asumsi Anda sudah memiliki Spring Web), Anda memerlukan beberapa dependensi lain untuk contoh aplikasi ini:

  • Musim Semi Data JPA
  • Driver JDBC MySQL
  • daun thyme
  • Lombok

Kerangka kerja Thymeleaf akan menghasilkan tampilan yang berbeda. Lombok akan membantu mengurangi kode di kelas objek Anda. Pustaka JPA dan driver MySQL akan memungkinkan Anda untuk menggunakan database MySQL dengan aplikasi tersebut, tetapi Anda memiliki opsi untuk menggunakan database apa pun yang nyaman bagi Anda. Menggunakan database berarti mengkonfigurasi aplikasi.properti file di bawah file sumber daya.

 spring.datasource.url=jdbc:mysql:
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update

Kode konfigurasi di atas memungkinkan Anda untuk terhubung ke database MySQL lokal yang disebut spring_securitydengan nama pengguna dari akardan kata sandi (1234). Anda harus memperbarui data ini agar cocok dengan nama database dan kredensial Anda.

Setelah menambahkan dependensi tambahan dan membuat database, Anda dapat mulai memutuskan berapa banyak tampilan yang akan dimiliki aplikasi Anda. Anda juga perlu mengetahui seperti apa keamanan untuk setiap halaman. Contoh aplikasi kami memiliki 6 tampilan:

  • Halaman Beranda
  • Halaman Pendaftaran
  • Halaman masuk
  • Halaman Keluar
  • Halaman Pengguna
  • Halaman Kesalahan

Satu-satunya tampilan yang memerlukan otorisasi pengguna adalah halaman pengguna. Halaman ini hanya dapat diakses oleh pengguna yang terlebih dahulu mendaftar, kemudian masuk ke aplikasi. Selain paket default Spring Boot, Anda harus membuat empat paket lain di aplikasi Anda.

Kelas Pengendali Registrasi

Paket pengontrol akan berisi kelas-kelas yang menangani permintaan HTTP. Bergantung pada fungsi halaman, Anda biasanya dapat mengelompokkan setiap permintaan HTTP ke dalam satu kelas pengontrol, seperti halnya dengan WebController kelas. Namun, tampilan registrasi memiliki fungsi yang lebih unik, sehingga dapat memiliki kelas pengontrol privat:

 @Controller
@RequestMapping("/register")
public class RegistrationController {
       private UserRepository userRepo;
       private PasswordEncoder passwordEncoder;
       
       public RegistrationController( UserRepository userRepo, PasswordEncoder passwordEncoder) {
             this.userRepo = userRepo;
             this.passwordEncoder = passwordEncoder;
       }
       @GetMapping
       public String registerForm() {
             return "registration";
       }
       @PostMapping
       public String processRegistration(RegistrationForm form) {
             userRepo.save(form.toUser(passwordEncoder));
             return "redirect:/login";
       }
}

Itu RegistrationController class adalah pintu gerbang ke aspek keamanan aplikasi Anda. Itu @RequestMapping anotasi menentukan jenis permintaan yang akan ditangani pengontrol ini (permintaan ke localhost:8080/daftar).

Itu @Dapatkan Pemetaan anotasi hanya menunjukkan bahwa jika aplikasi menerima permintaan untuk /daftaritu formulir pendaftaran() metode harus menangani permintaan itu dengan mengembalikan tampilan pendaftaran.

Setelah pengunjung mengklik tombol daftar, maka @PostMapping anotasi mulai berlaku. Itu prosesRegistrasi() metode memungkinkan Anda untuk memposting data pengguna yang didapat dari Formulir pendaftaran kelas ke database, menggunakan Repositori Pengguna kelas. Namun sebelum menyimpan data ini, file prosesRegistrasi() metode mengenkripsi kata sandi pengguna menggunakan musim semi PasswordEncoder antarmuka.

Membuat Konfigurasi Keamanan Baru

Sejak Spring 3.1, developer sekarang dapat membuat konfigurasi untuk Spring Security menggunakan Java, yang berarti class, bukan XML. Hal utama yang dibutuhkan kelas konfigurasi ini adalah @Konfigurasi anotasi.

 @Configuration
public class SecurityConfiguration {
}

Itu @Konfigurasi anotasi menunjukkan bahwa kelas di atas adalah kelas konfigurasi. Kelas-kelas ini menyediakan kacang ke konteks aplikasi Spring, yang merupakan wadah yang digunakan Spring untuk membuat dan mengelola berbagai komponen (atau kacang) aplikasi. Kacang pertama di Konfigurasi Keamanan kelas adalah passwordEncoder kacang.

 @Bean
public PasswordEncoder passwordEncoder() {
 return new BCryptPasswordEncoder();
}

Itu RegistrationController kelas menggunakan passwordEncoder bean untuk menyandikan kata sandi baru sebelum menyimpannya ke database. Kacang penting lainnya yang perlu Anda tambahkan ke Konfigurasi Keamanan kelas adalah userDetailsService kacang.

 @Bean
public UserDetailsService userDetailsService(UserRepository userRepo) {
 return username -> {
   Customer customer = userRepo.findByUsername(username);
     if (customer != null)
           return customer;
     throw new UsernameNotFoundException("Customer '" + username + "' not found");
 };
}

Itu userDetailsService kacang mempekerjakan Keamanan Musim Semi UserDetailsService antarmuka untuk mengambil nama pengguna dan kata sandi pengguna untuk otentikasi, selama sesi login pelanggan. Jadi, segera setelah pelanggan mengklik tombol login di tampilan login, userDetailsService kacang mulai bergerak.

Melalui Repositori Penggunaitu userDetailsService bean mendapatkan akses ke semua pelanggan yang ada di database. Antarmuka ini kemudian menggunakan Repositori Pengguna untuk menemukan pengguna dengan nama pengguna dan kata sandi yang cocok, lalu mengembalikan semua atribut pelanggan ini sebagai objek.

Jika objek yang dikembalikan adalah pelanggan, maka pelanggan ini mendapatkan akses ke aplikasi. Jika tidak, halaman akan disegarkan secara otomatis sehingga memungkinkan pengguna memasukkan kredensial yang valid.

Rantai Filter

Keamanan Musim Semi SecurityFilterChain antarmuka adalah antarmuka pemrograman aplikasi (API) yang berguna yang memainkan peran penting dalam konfigurasi Spring Security. Antarmuka ini bekerja dengan Keamanan Musim Semi HttpSecurity kelas untuk membuat rantai filter untuk permintaan HTTP tertentu.

 @Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
  http
  .authorizeHttpRequests((authorize) -> authorize
              .requestMatchers("/user").hasAuthority("USER").anyRequest().permitAll())
  .formLogin(formLogin -> formLogin
              .loginPage("/login").defaultSuccessUrl("/user", true))
  .logout(logout -> logout.logoutSuccessUrl("/logout"));
 return http.build();
}

Itu filterChain kacang di atas menggunakan SecurityFilterChain API untuk menyelesaikan beberapa tugas. Pertama, ini menggunakan HttpSecurity kelas untuk menentukan bahwa hanya pengguna yang memiliki peran PENGGUNA yang dapat mengakses localhost:8080/pengguna. Dan pengguna mendapatkan peran ini setelah pendaftaran, berkat getAuthorities() metode yang diterapkan oleh setiap objek pelanggan baru.

 @Override
public Collection<? extends GrantedAuthority> getAuthorities() {
 return Arrays.asList(new SimpleGrantedAuthority("USER"));
}

Rantai filter memungkinkan akses yang tidak diautentikasi ke semua URL lain dalam aplikasi. Itu filterChain kacang juga memanfaatkan formLogin() Dan keluar() metode dari HttpSecurity objek kelas.

Metode ini memungkinkan Anda mengarahkan pengguna secara otomatis ke halaman tertentu setelah mereka melakukan tugas. Jadi, pengguna yang memasukkan kredensial yang benar dan mengklik tombol login di /Gabung halaman akan secara otomatis diarahkan ke /pengguna halaman.

Akhirnya, filterChain bean membangun dan mengembalikan rantai filter, yang memungkinkan pengguna yang berwenang untuk mengakses aplikasi. Ketiga kacang di Konfigurasi Keamanan kelas bekerja sama untuk mengamankan aplikasi Anda.

Namun, filterChain bean memainkan peran yang lebih signifikan dalam mendikte tingkat otorisasi untuk setiap permintaan HTTP. Saat Anda mulai menambahkan lebih banyak halaman ke aplikasi Anda, Anda dapat menggunakan filterChain kacang untuk mengatur tingkat keamanan mereka.

Manfaat Utama Keamanan Musim Semi

Spring Security memberi Anda kendali penuh tidak hanya atas siapa yang memiliki akses ke aplikasi Anda, tetapi juga jenis akses yang dapat dimiliki pengguna (melalui fitur peran penggunanya). Kontrol akses adalah salah satu aspek terpenting dari aplikasi apa pun. Memberi pengguna umum akses tanpa filter ke aplikasi Anda karena hambatan kontrol akses yang terbatas mungkin merupakan kesalahan yang merugikan.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad