Mukautettu OAuth2-onnistumiskäsittelijä
Kehitä mukautettu onnistumiskäsittelijä, joka käsittelee käyttäjätiedot onnistuneen OAuth2-todennuksen jälkeen.
Mukautettu OAuth2-onnistumiskäsittelijä on ilmainen Spring Security 6 ja JWT-todennus-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Spring Security 6 ja JWT-todennus-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Spring Security 6 ja JWT-todennus-kurssilla on yhteensä 4 oppituntia.
Johdanto OAuth2:n onnistumiskäsittelijöihin
Tervetuloa mukautettuja OAuth2:n onnistumiskäsittelijöitä käsittelevään oppituntiin! Kun käyttäjä kirjautuu onnistuneesti OAuth2-palveluntarjoajan, kuten Googlen tai GitHubin, kautta, Spring Securityn on tiedettävä, mitä seuraavaksi tehdään.
Oletusarvoisesti se käsittelee perusmuotoisen uudelleenohjauksen. Entä jos haluatte suorittaa mukautettuja toimintoja, kuten tallentaa käyttäjän tiedot tai päivittää hänen profiilinsa? Tässä mukautetut onnistumiskäsittelijät tulevat avuksi!
OAuth2:n oletusarvoinen onnistumisvuo
Kun käyttäjä todennetaan onnistuneesti OAuth2-palveluntarjoajalla, Spring Securityn oletustoiminta on melko suoraviivainen:
- Se poimii palveluntarjoajan vastauksesta käyttäjän tiedot, kuten nimen ja sähköpostiosoitteen.
- Se luo
OAuth2AuthenticationToken-olion. - Se ohjaa käyttäjän sovelluksen juuriosoitteeseen tai aiemmin pyydettyyn osoitteeseen.
Tämä riittää usein yksinkertaisiin integraatioihin, mutta tosielämän sovellukset tarvitsevat yleensä enemmän.
Miksi onnistumisen käsittelyä mukautetaan?
Onnistumiskäsittelijän mukauttaminen mahdollistaa seuraavat toiminnot:
- Käyttäjätietojen tallentaminen: Uusien käyttäjien tallentaminen tai olemassa olevien käyttäjien päivittäminen sovelluksen tietokannassa.
- Tunnusten luominen: Mukautettujen istuntotunnusten tai JWT-tunnusten luominen OAuth2-kirjautumisen jälkeen.
- Dynaaminen uudelleenohjaus: Käyttäjien lähettäminen eri sivuille heidän roolinsa tai tilansa perusteella.
- Lokitus ja auditointi: Onnistuneiden kirjautumisten kirjaaminen tietoturvan valvontaa varten.
Se antaa tarkan hallinnan todennuksen jälkeiseen prosessiin.
AuthenticationSuccessHandler
Spring Security tarjoaa AuthenticationSuccessHandler-rajapinnan. Toteutatte tämän rajapinnan määrittääksenne mukautetun logiikan onnistuneille todennustapahtumille.
Sen keskeinen metodi on onAuthenticationSuccess, jota kutsutaan todennuksen onnistuttua.
public interface AuthenticationSuccessHandler {
void onAuthenticationSuccess(
HttpServletRequest request,
HttpServletResponse response,
Authentication authentication
) throws IOException, ServletException;
}Yksinkertaisen mukautetun käsittelijän luominen
Luodaan perusmuotoinen mukautettu käsittelijä, joka vain kirjaa onnistuneen todennuksen ja suorittaa sen jälkeen uudelleenohjauksen. Toteutamme AuthenticationSuccessHandler-rajapinnan.
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("/");
}
}
Mukautetun käsittelijän määrittäminen
Jotta Spring Security käyttäisi mukautettua käsittelijäämme, se on määritettävä SecurityFilterChain-beanissa. Käytämme oauth2Login()-metodia.
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();
}
}
Käyttäjän tietojen käyttäminen
onAuthenticationSuccess-metodin sisällä Authentication-olio sisältää todennetun principalin. OAuth2:n tapauksessa tämä principal on OAuth2User.
Voitte muuntaa sen OAuth2User-tyyppiseksi ja käyttää palveluntarjoajakohtaisia määritteitä, kuten sähköpostiosoitetta, nimeä tai yksilöllisiä tunnuksia, esimerkiksi Google-tunnusta.
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("/");
}Käytännössä: käyttäjän tallentaminen tietokantaan
Yleinen käyttötapaus on käyttäjän tietojen tallentaminen tietokantaan tai niiden päivittäminen onnistuneen OAuth2-kirjautumisen jälkeen. Tässä on yksinkertaistettu esimerkki:
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("/");
}
}
Mukautettu uudelleenohjauslogiikka
onAuthenticationSuccess-metodilla voitte myös hallita kirjautumisen jälkeistä uudelleenohjausta. Voitte ohjata käyttäjät tiettyyn hallintapaneeliin, profiilin määrityssivulle tai takaisin sivulle, jota he yrittivät käyttää.
Voitte käyttää metodia response.sendRedirect("/some-path") tai integroida Springin RedirectStrategy-strategian.
request.getRequestURI(): Hakee alkuperäisen pyynnön URI-osoitteen.response.sendRedirect("/"): Ohjaa juuriosoitteeseen.new DefaultRedirectStrategy().sendRedirect(request, response, "/dashboard"): Vankempi uudelleenohjaustapa.
Pikatarkistus: onnistumiskäsittelijät
Mitkä seuraavista ovat kelvollisia syitä toteuttaa OAuth2:ta varten mukautettu AuthenticationSuccessHandler Spring Securityssä?
Kertaus: mukautetut onnistumiskäsittelijät
Tässä oppitunnissa tutustuimme siihen, miten OAuth2-kirjautumisten todennuksen jälkeistä prosessia mukautetaan Spring Securityn AuthenticationSuccessHandler-rajapinnan avulla.
- Opimme sen tarkoituksen: oletustoiminnan laajentamisen käyttäjien hallintaa, uudelleenohjausta ja auditointia varten.
- Näimme, miten
onAuthenticationSuccess-metodi toteutetaan. - Määritimme mukautetun käsittelijän
SecurityFilterChain-ketjussa. - Opimme käyttämään
OAuth2User-tietoja ja suorittamaan toimintoja, kuten käyttäjien tallentamisen tietokantaan.
Mukautetut onnistumiskäsittelijät tarjoavat tehokkaan hallinnan sovelluksen käyttäjäkokemukseen ja tietojen integrointiin OAuth2-kirjautumisen jälkeen.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Mukautettu OAuth2-onnistumiskäsittelijä” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Spring Security 6 ja JWT-todennus-oppimispolun 3 oppituntia, myös oppitunnin “Mukautettu OAuth2-onnistumiskäsittelijä”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Spring Security 6 ja JWT-todennus-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Mukautettu OAuth2-onnistumiskäsittelijä”?
Kehitä mukautettu onnistumiskäsittelijä, joka käsittelee käyttäjätiedot onnistuneen OAuth2-todennuksen jälkeen. Harjoittelet Spring Security 6 ja JWT-todennus-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Spring Security 6 ja JWT-todennus-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Spring Security 6 ja JWT-todennus-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Mukautettu OAuth2-onnistumiskäsittelijä”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Spring Security 6 ja JWT-todennus-oppitunnilla?
Kyllä. Jokainen Spring Security 6 ja JWT-todennus-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- OAuth2-asiakkaan määritys
- Sosiaalisen kirjautumisen integrointi
- Mukautettu OAuth2-onnistumiskäsittelijä
- Todennetun OAuth2-käyttäjän tietojen hakeminen