Keselamatan Spring dan Pengesahan JWT · Pelajaran

Pengendali Kejayaan OAuth2 Tersuai

Bangunkan pengendali kejayaan tersuai untuk memproses maklumat pengguna selepas pengesahan OAuth2 berjaya.

Pelajaran 3 daripada 411 langkah

Pengendali Kejayaan OAuth2 Tersuai ialah pelajaran Keselamatan Spring dan Pengesahan JWT percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Keselamatan Spring dan Pengesahan JWT, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Keselamatan Spring dan Pengesahan JWT merangkumi sejumlah 4 pelajaran.

Pengenalan kepada Pengendali Kejayaan OAuth2

Selamat datang ke pelajaran tentang pengendali kejayaan OAuth2 tersuai! Selepas pengguna berjaya log masuk melalui penyedia OAuth2 (seperti Google atau GitHub), Spring Security perlu mengetahui perkara yang perlu dilakukan seterusnya.

Secara lalai, ia mengendalikan pengalihan asas. Namun, bagaimana jika anda perlu melaksanakan tindakan tersuai seperti menyimpan butiran pengguna atau mengemas kini profil mereka? Di sinilah pengendali kejayaan tersuai digunakan!

Aliran Kejayaan OAuth2 Lalai

Apabila pengguna berjaya membuat pengesahan dengan penyedia OAuth2, tingkah laku lalai Spring Security adalah agak mudah:

  • Ia mengekstrak butiran pengguna (seperti nama dan e-mel) daripada respons penyedia.
  • Ia mencipta OAuth2AuthenticationToken.
  • Ia menghalakan pengguna ke URL akar aplikasi (atau URL yang diminta sebelum ini).

Ini selalunya mencukupi untuk integrasi mudah, tetapi aplikasi dunia sebenar biasanya memerlukan lebih banyak perkara.

Mengapa Menyesuaikan Pengendalian Kejayaan?

Menyesuaikan pengendali kejayaan membolehkan anda:

  • Menyimpan Data Pengguna: Menyimpan pengguna baharu atau mengemas kini pengguna sedia ada dalam pangkalan data aplikasi anda.
  • Menjana Token: Mencipta token sesi tersuai atau JWT selepas log masuk OAuth2.
  • Mengalih Secara Dinamik: Menghantar pengguna ke halaman berbeza berdasarkan peranan atau status mereka.
  • Pembalakan & Pengauditan: Merekod log masuk yang berjaya untuk pemantauan keselamatan.

Ini memberikan anda kawalan terperinci terhadap proses selepas pengesahan.

AuthenticationSuccessHandler

Spring Security menyediakan antara muka AuthenticationSuccessHandler. Anda melaksanakan antara muka ini untuk mentakrifkan logik tersuai bagi peristiwa pengesahan yang berjaya.

Kaedah terasnya ialah onAuthenticationSuccess, yang dipanggil selepas pengesahan berjaya.

public interface AuthenticationSuccessHandler {
void onAuthenticationSuccess(
HttpServletRequest request,
HttpServletResponse response,
Authentication authentication
) throws IOException, ServletException;
}

Membina Pengendali Tersuai Mudah

Mari cipta pengendali tersuai asas yang hanya merekod pengesahan berjaya dan kemudian membuat pengalihan. Kita akan melaksanakan antara muka AuthenticationSuccessHandler.

import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.core.Authentication;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import org.springframework.stereotype.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
public class CustomOAuth2SuccessHandler implements AuthenticationSuccessHandler {

    private static final Logger logger = LoggerFactory.getLogger(CustomOAuth2SuccessHandler.class);

    @Override
    public void onAuthenticationSuccess(
        HttpServletRequest request,
        HttpServletResponse response,
        Authentication authentication) throws IOException, ServletException {

        logger.info("OAuth2 login successful for user: " + authentication.getName());
        // Default redirect to home page
        response.sendRedirect("/");
    }
}

Mengkonfigurasi Pengendali Tersuai

Untuk membolehkan Spring Security menggunakan pengendali tersuai kita, kita perlu mengkonfigurasinya dalam bean SecurityFilterChain. Kita akan menggunakan kaedah oauth2Login().

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    private final AuthenticationSuccessHandler customOAuth2SuccessHandler;

    public SecurityConfig(AuthenticationSuccessHandler customOAuth2SuccessHandler) {
        this.customOAuth2SuccessHandler = customOAuth2SuccessHandler;
    }

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            .oauth2Login(oauth2 -> oauth2
                .successHandler(customOAuth2SuccessHandler) // <--- Register our handler
            );
        return http.build();
    }
}

Mengakses Butiran Pengguna

Di dalam onAuthenticationSuccess, objek Authentication menyimpan principal yang disahkan. Bagi OAuth2, principal ini ialah OAuth2User.

Anda boleh menukarkannya kepada OAuth2User untuk mengakses atribut khusus penyedia seperti e-mel, nama atau ID unik (contohnya, ID Google).

import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;

// Inside onAuthenticationSuccess method:

public void onAuthenticationSuccess(
    HttpServletRequest request,
    HttpServletResponse response,
    Authentication authentication) throws IOException, ServletException {

    if (authentication instanceof OAuth2AuthenticationToken) {
        OAuth2AuthenticationToken oauthToken = (OAuth2AuthenticationToken) authentication;
        OAuth2User oauth2User = oauthToken.getPrincipal();

        String email = oauth2User.getAttribute("email");
        String name = oauth2User.getAttribute("name");
        String provider = oauthToken.getAuthorizedClientRegistrationId();

        logger.info("User logged in: " + name + " from " + provider + " with email: " + email);
        // ... further processing
    }
    response.sendRedirect("/");
}

Praktikal: Menyimpan Pengguna ke Pangkalan Data

Kes penggunaan yang biasa ialah menyimpan atau mengemas kini maklumat pengguna dalam pangkalan data selepas log masuk OAuth2 berjaya. Berikut ialah contoh yang dipermudah:

import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import org.springframework.stereotype.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

// Assume you have a UserService and User entity
// public interface UserService { User saveOrUpdateUser(OAuth2User oauth2User, String provider); }
// public class User { private String email; private String name; /*...*/ }

@Component
public class DatabaseOAuth2SuccessHandler implements AuthenticationSuccessHandler {

    private static final Logger logger = LoggerFactory.getLogger(DatabaseOAuth2SuccessHandler.class);
    // private final UserService userService; // Inject your user service

    // public DatabaseOAuth2SuccessHandler(UserService userService) {
    //     this.userService = userService;
    // }

    @Override
    public void onAuthenticationSuccess(
        HttpServletRequest request,
        HttpServletResponse response,
        Authentication authentication) throws IOException, ServletException {

        if (authentication instanceof OAuth2AuthenticationToken) {
            OAuth2AuthenticationToken oauthToken = (OAuth2AuthenticationToken) authentication;
            OAuth2User oauth2User = oauthToken.getPrincipal();
            String provider = oauthToken.getAuthorizedClientRegistrationId();

            logger.info("Processing OAuth2 user from " + provider);
            // User savedUser = userService.saveOrUpdateUser(oauth2User, provider);
            // logger.info("User saved/updated: " + savedUser.getEmail());
        }
        response.sendRedirect("/");
    }
}

Logik Pengalihan Tersuai

Kaedah onAuthenticationSuccess juga membolehkan anda mengawal pengalihan selepas log masuk. Anda boleh menghalakan pengguna ke papan pemuka tertentu, halaman penyediaan profil atau kembali ke halaman yang cuba mereka akses.

Anda boleh menggunakan response.sendRedirect("/some-path") atau mengintegrasikannya dengan RedirectStrategy Spring.

  • request.getRequestURI(): Dapatkan URI permintaan asal.
  • response.sendRedirect("/"): Halakan ke akar.
  • new DefaultRedirectStrategy().sendRedirect(request, response, "/dashboard"): Pengalihan yang lebih kukuh.

Semakan Pantas: Pengendali Kejayaan

Antara berikut, yang manakah merupakan sebab yang sah untuk melaksanakan AuthenticationSuccessHandler tersuai bagi OAuth2 dalam Spring Security?

Ulang Kaji: Pengendali Kejayaan Tersuai

Dalam pelajaran ini, kita meneroka cara menyesuaikan proses selepas pengesahan untuk log masuk OAuth2 menggunakan AuthenticationSuccessHandler Spring Security.

  • Kita mempelajari tujuannya: melanjutkan tingkah laku lalai untuk pengurusan pengguna, pengalihan dan pengauditan.
  • Kita melihat cara melaksanakan kaedah onAuthenticationSuccess.
  • Kita mengkonfigurasi pengendali tersuai dalam SecurityFilterChain.
  • Kita memahami cara mengakses butiran OAuth2User dan melaksanakan tindakan seperti menyimpan pengguna ke pangkalan data.

Pengendali kejayaan tersuai memberikan kawalan yang berkuasa terhadap pengalaman pengguna dan integrasi data aplikasi anda selepas log masuk OAuth2.

Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Pengendali Kejayaan OAuth2 Tersuai” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Keselamatan Spring dan Pengesahan JWT, termasuk “Pengendali Kejayaan OAuth2 Tersuai”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Keselamatan Spring dan Pengesahan JWT merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengendali Kejayaan OAuth2 Tersuai”?

Bangunkan pengendali kejayaan tersuai untuk memproses maklumat pengguna selepas pengesahan OAuth2 berjaya. Anda berlatih Keselamatan Spring dan Pengesahan JWT menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Keselamatan Spring dan Pengesahan JWT?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Keselamatan Spring dan Pengesahan JWT di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Pengendali Kejayaan OAuth2 Tersuai” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Keselamatan Spring dan Pengesahan JWT ini?

Ya. Setiap pelajaran Keselamatan Spring dan Pengesahan JWT menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Persediaan Klien OAuth2
  2. Integrasi Log Masuk Sosial
  3. Pengendali Kejayaan OAuth2 Tersuai
  4. Mengakses Pengguna OAuth2 yang Disahkan
← Kembali ke Keselamatan Spring dan Pengesahan JWT