JavaRush /Blog Jawa /Random-JV /Ayo ngenalake login biasa liwat email lan OAuth2 menyang ...

Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan

Diterbitake ing grup
Nalika nulis aplikasi, aku nemoni kekurangan artikel sing jelas babagan carane pangguna bisa ndhaptar liwat email lan jaringan sosial. Ana tutorial apik babagan nyetel formulir login klasik. Ana tutorial apik ing OAuth2 . Ora ana informasi kriminal babagan cara nggabungake rong cara kasebut. Sajrone proses panelusuran, kita bisa nemokake solusi sing bisa ditindakake. Ora ngaku minangka bebener sing paling utama, nanging nindakake fungsine. Ing artikel iki aku bakal nuduhake carane ngleksanakake layanan panyimpenan cathetan karo konfigurasi Spring Keamanan padha saka ngeruk. Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 1Wigati: iku apik yen maca wis musna liwat ing paling saperangan saka tutorial ing Spring, amarga manungsa waé bakal fokus mung ing Spring Keamanan, tanpa panjelasan rinci repositori, pengontrol, etc. Yen ora, artikel wis rada gedhe bakal nguripake metu kanggo dadi raksasa. Isi
  1. Nggawe Proyek
  2. Nggawe Entitas lan Logika Aplikasi
    1. Entitas
    2. Repositori
    3. Pengontrol
    4. kaca
  3. Konfigurasi Keamanan Spring kanggo Login Klasik
    1. Konfigurasi dhasar SecurityConfig
    2. Mlebet pangguna khusus
    3. Ayo dadi nambah controller
    4. Bukak
  4. Nyetel OAuth2 nggunakake Google minangka conto ing Spring Security
    1. konfigurasi Filter lan application.properties
    2. Sorotan ndhaptar aplikasi nganggo Google Cloud Platform
    3. CustomUserInfoTokenServices
  5. Bukak pungkasan proyek

Nggawe Proyek

Kita pindhah menyang start.spring.io lan dadi basis proyek kasebut:
  • Web - ngluncurake aplikasi ing Tomcat, pemetaan url lan liya-liyane;
  • JPA - koneksi database;
  • Kumis minangka mesin cithakan sing digunakake kanggo ngasilake kaca web;
  • Keamanan - pangayoman aplikasi. Iki kanggo apa artikel iki digawe.
Download arsip asil lan unpack ing folder sing perlu. Kita miwiti ing IDE. Sampeyan bisa milih database ing discretion sampeyan. Aku nggunakake MySQL minangka basis data kanggo proyek kasebut, mula aku nambahake dependensi ing ngisor iki menyang file pom.xml ing blok <dependencies>:
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.34</version>
</dependency>
Konfigurasi application.properties saiki kaya ing ngisor iki:
spring.datasource.url=jdbc:mysql://localhost:3306/springsectut?createDatabaseIfNotExist=true&useSSL=false&autoReconnect=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=yourUsername
spring.datasource.password=yourPassword

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update

spring.jpa.properties.connection.characterEncoding=utf-8
spring.jpa.properties.connection.CharSet=utf-8
spring.jpa.properties.connection.useUnicode=true

spring.mustache.expose-request-attributes=true

Nggawe Entitas lan Logika Aplikasi

Entitas

Ayo nggawe paket entitiessing bakal dilebokake entitas database. Pangguna bakal diterangake dening kelas Usersing ngleksanakake antarmuka UserDetails, sing bakal dibutuhake kanggo konfigurasi Keamanan Spring. Pangguna bakal duwe id, jeneng pangguna (iki email), sandhi, jeneng, peran, gendera kegiatan, jeneng akun Google lan email ( googleNamelan googleUsername).
@Entity
@Table(name = "user")
public class User implements UserDetails
{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  private String username;
  private String password;
  private String name;
  private boolean active;
  private String googleName;
  private String googleUsername;

  @ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
  @CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
  @Enumerated(EnumType.STRING)
  private Set<Role> roles;

    //Геттеры, сеттеры, toString(), equals(), hashcode(), имплементация UserDetails
}
Peran pangguna digunakake kanggo ngatur akses ing Keamanan Spring. Aplikasi kita mung bakal nggunakake siji peran:
public enum Role implements GrantedAuthority
{
  USER;

  @Override
  public String getAuthority()
  {
     return name();
  }
}
Ayo nggawe kelas cathetan kanthi id, judhul cathetan, awak cathetan lan id pangguna sing duweni:
@Entity
@Table(name = "note")
public class Note
{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  private String title;
  private String note;
  private Long userId;

    //Геттеры, сеттеры, toString(), equals(), hashcode()
}

Repositori

Kanggo nyimpen entitas menyang database, kita butuh repositori sing bakal nindakake kabeh karya reged kanggo kita. Ayo nggawe paket repos, ing kono kita bakal nggawe antarmuka UserReposing diwarisake NoteReposaka antarmuka JpaRepository<Entity, Id>.
@Service
@Repository
public interface UserRepo extends JpaRepository<User, Long>
{}

@Service
@Repository
public interface NoteRepo extends JpaRepository<Note, Long>
{
  List<Note> findByUserId(Long userId);
}

Pengontrol

Layanan cathetan kita bakal duwe kaca ing ngisor iki:
  • Ngarep;
  • Registrasi;
  • mlebu;
  • Dhaptar cathetan pangguna.
Mung pangguna sing sah kudu duwe akses menyang dhaptar cathetan. Kaca sing isih ana kanggo umum. Ayo nggawe paket controllerssing ngemot kelas IndexControllersing ngemot pemetaan biasa ing kaca utama. Kelas RegistrationControllertanggung jawab kanggo ndhaptar pangguna. Post-mapping njupuk data saka formulir, nyimpen pangguna menyang database lan pangalihan menyang kaca login. PasswordEncoderbakal diterangake mengko. Iki digunakake kanggo encrypt sandhi.
@Controller
public class RegistrationController
{
  @Autowired
  private UserRepo userRepo;

  @Autowired
  private PasswordEncoder passwordEncoder;

  @GetMapping("/registration")
  public String registration()
  {
     return "registration";
  }

  @PostMapping("/registration")
  public String addUser(String name, String username, String password)
  {
     User user = new User();
     user.setName(name);
     user.setUsername(username);
     user.setPassword(passwordEncoder.encode(password));
     user.setActive(true);
     user.setRoles(Collections.singleton(Role.USER));

     userRepo.save(user);

     return "redirect:/login";
  }
Kontroler sing tanggung jawab kanggo kaca dhaptar cathetan saiki ngemot fungsi sing disederhanakake, sing bakal dadi luwih rumit sawise implementasine Spring Security.
@Controller
public class NoteController
{
  @Autowired
  private NoteRepo noteRepo;

  @GetMapping("/notes")
  public String notes(Model model)
  {
     List<Note> notes = noteRepo.findAll();
     model.addAttribute("notes", notes);

     return "notes";
  }

  @PostMapping("/addnote")
  public String addNote(String title, String note)
  {
     Note newNote = new Note();
     newNote.setTitle(title);
     newNote.setNote(note);

     noteRepo.save(newNote);

     return "redirect:/notes";
  }
}
Kita ora bakal nulis controller kanggo kaca mlebu amarga digunakake dening Spring Security. Nanging, kita butuh konfigurasi khusus. Kaya biasane, ayo nggawe paket liyane, nelpon config, lan nyelehake kelas ing kana MvcConfig. Nalika kita nulis konfigurasi Spring Security, bakal ngerti kaca sing kita deleng nalika nggunakake "/login".
@Configuration
public class MvcConfig implements WebMvcConfigurer
{
  public void addViewControllers(ViewControllerRegistry registry)
  {
     registry.addViewController("/login").setViewName("login");
     registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
  }
}

kaca

Aku nggunakake mesin template Kumis kanggo nggawe kaca . Sampeyan bisa ngetrapake siji liyane, ora masalah. File meta.mustache wis digawe kanggo informasi meta sing digunakake ing kabeh kaca. Iki uga kalebu Bootstrap kanggo nggawe kaca proyek kita katon luwih apik. Kaca digawe ing direktori "src/main/resources/templates". File kasebut duwe kumis ekstensi. Nempatake kode html langsung ing artikel bakal dadi gedhe banget, mula iki link menyang folder template ing repositori GitHub proyek .

Konfigurasi Keamanan Spring kanggo Login Klasik

Spring Security mbantu kita nglindhungi aplikasi lan sumber daya saka akses sing ora sah. Kita bakal nggawe konfigurasi kerja sing ringkes ing kelas SecurityConfigsing diwarisake WebSecurityConfigurerAdapter, sing bakal dilebokake ing paket kasebut config. Ayo menehi tandha nganggo anotasi @EnableWebSecurity, sing bakal ngaktifake dhukungan Spring Security, lan anotasi @Configuration, sing nuduhake yen kelas iki ngemot sawetara konfigurasi. Cathetan: pom.xml sing dikonfigurasi kanthi otomatis ngemot versi komponen induk Spring Boot 2.1.4.RELEASE, sing nyegah Keamanan supaya ora ditindakake kanthi cara sing wis ditemtokake. Kanggo ngindhari konflik ing proyek kasebut, dianjurake kanggo ngganti versi 2.0.1.RELEASE.

Konfigurasi dhasar SecurityConfig

Konfigurasi kita bakal bisa:
  1. Enkripsi sandhi nggunakake BCryptPasswordEncoder:

    @Autowired
    private PasswordEncoder passwordEncoder;
    
    @Bean
    PasswordEncoder passwordEncoder()
    {
      PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
      return passwordEncoder;
    }
  2. Mlebu nggunakake panyedhiya otentikasi sing ditulis khusus:

    @Autowired
    private AuthProvider authProvider;
    
    @Override
    protected void configure(AuthenticationManagerBuilder auth)
    {
      auth.authenticationProvider(authProvider);
    }
  3. Ngidini pangguna anonim ngakses menyang kaca ngarep, registrasi lan kaca login. Kabeh panjalukan liyane kudu ditindakake dening pangguna sing mlebu. Ayo nemtokake "/login" sing wis diterangake sadurunge minangka kaca mlebu. Yen login kasil, pangguna bakal digawa menyang kaca kanthi dhaptar cathetan; yen ana kesalahan, pangguna bakal tetep ing kaca mlebu. Sawise sukses metu, pangguna bakal digawa menyang kaca utama.

    @Override
    protected void configure(HttpSecurity http) throws Exception
    {
      http
            .authorizeRequests()
            .antMatchers("/resources/**", "/", "/login**", "/registration").permitAll()
            .anyRequest().authenticated()
            .and().formLogin().loginPage("/login")
            .defaultSuccessUrl("/notes").failureUrl("/login?error").permitAll()
            .and().logout().logoutSuccessUrl("/").permitAll();
    }

Mlebet pangguna khusus

Sing ditulis dhewe AuthProviderbakal ngidini pangguna mlebu ora mung nganggo email, nanging uga nganggo jeneng pangguna.
@Component
public class AuthProvider implements AuthenticationProvider
{
  @Autowired
  private UserService userService;

  @Autowired
  private PasswordEncoder passwordEncoder;

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

     User user = (User) userService.loadUserByUsername(username);

     if(user != null && (user.getUsername().equals(username) || user.getName().equals(username)))
     {
        if(!passwordEncoder.matches(password, user.getPassword()))
        {
           throw new BadCredentialsException("Wrong password");
        }

        Collection<? extends GrantedAuthority> authorities = user.getAuthorities();

        return new UsernamePasswordAuthenticationToken(user, password, authorities);
     }
     else
        throw new BadCredentialsException("Username not found");
  }

  public boolean supports(Class<?> arg)
  {
     return true;
  }
}
Kaya sing wis dingerteni, kelas UserServicesing ana ing paket kasebut tanggung jawab kanggo mbukak pangguna services. Ing kasus kita, nggoleki pangguna ora mung ing lapangan username, kaya implementasine sing dibangun, nanging uga kanthi jeneng pangguna, jeneng akun Google lan email akun Google. Rong cara pungkasan bakal migunani kanggo kita nalika ngetrapake login liwat OAuth2. Kene kelas diwenehi ing versi singkatan.
@Service
public class UserService implements UserDetailsService
{
  @Autowired
  private UserRepo userRepo;

  @Override
  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
  {
     User userFindByUsername = userRepo.findByUsername(username);
     //Остальные поиски

     if(userFindByUsername != null)
     {
        return userFindByUsername;
     }
     //Остальные проверки
     return null;
  }
}
Cathetan: aja lali nulis cara sing dibutuhake ing UserRepo!

Ayo dadi nambah controller

Kita wis ngonfigurasi Keamanan Spring. Saiki iki wektu kanggo njupuk kauntungan saka iki ing controller cathetan. Saiki saben pemetaan bakal nampa parameter Principal tambahan, sing bakal nyoba nemokake pangguna. Apa aku ora bisa langsung nyuntik kelas User? Banjur bakal ana konflik amarga ora cocog karo jinis pangguna nalika nulis login liwat jaringan sosial. Kita nyedhiyakake keluwesan sing dibutuhake sadurunge. Kode pengontrol cathetan saiki katon kaya iki:
@GetMapping("/notes")
public String notes(Principal principal, Model model)
{
  User user = (User) userService.loadUserByUsername(principal.getName());
  List<Note> notes = noteRepo.findByUserId(user.getId());
  model.addAttribute("notes", notes);
  model.addAttribute("user", user);

  return "notes";
}

@PostMapping("/addnote")
public String addNote(Principal principal, String title, String note)
{
  User user = (User) userService.loadUserByUsername(principal.getName());

  Note newNote = new Note();
  newNote.setTitle(title);
  newNote.setNote(note);
  newNote.setUserId(user.getId());

  noteRepo.save(newNote);

  return "redirect:/notes";
}
Wigati: project wis CSRF pangayoman aktif kanthi gawan , supaya salah siji mateni dhewe (http.csrf().disable()), utawa aja lali, minangka penulis artikel, kanggo nambah kolom didhelikake karo csrf token. kanggo kabeh panjalukan kirim.

Bukak

Kita nyoba miwiti proyek kasebut.
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 1
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 2
Kita weruh manawa pangguna anyar wis muncul ing basis data. Tembung sandhi dienkripsi.
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 3
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 4
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 5
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 6
Cathetan disimpen ing database.
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 7
Kita weruh manawa proyek kasebut sukses diluncurake lan mlaku. Kanggo rasa seneng sing lengkap, kita mung butuh kemampuan kanggo mlebu liwat jaringan sosial. Inggih, ayo padha miwiti!

Nyetel OAuth2 nggunakake Google minangka conto ing Spring Security

Nalika ngetrapake OAuth2, aku ngandelake tutorial resmi iki saka Spring . Kanggo ndhukung OAuth2, tambahake perpustakaan ing ngisor iki menyang pom.xml:
<dependency>
  <groupId>org.springframework.security.oauth.boot</groupId>
  <artifactId>spring-security-oauth2-autoconfigure</artifactId>
  <version>2.0.0.RELEASE</version>
</dependency>
Ayo ngowahi konfigurasi Keamanan Spring ing file SecurityConfig. Pisanan, ayo tambahake anotasi @EnableOAuth2Client. Iku bakal kanthi otomatis narik apa sing perlu kanggo mlebu liwat jaringan sosial.

konfigurasi Filter lan application.properties

Ayo nyuntikake OAuth2ClientContext kanggo digunakake ing konfigurasi keamanan kita.
@Autowired
private OAuth2ClientContext oAuth2ClientContext;
OAuth2ClientContext digunakake nalika nggawe saringan sing validasi panjalukan login sosial pangguna. Filter kasedhiya amarga @EnableOAuth2Client anotasi. Kabeh sing kudu ditindakake yaiku nelpon kanthi urutan sing bener, sadurunge filter Keamanan Spring utama. Mung banjur kita bakal bisa nyekel pangalihan nalika proses login nganggo OAuth2. Kanggo nindakake iki, kita nggunakake FilterRegistrationBean, ing ngendi kita nyetel prioritas filter kanggo -100.
@Bean
public FilterRegistrationBean oAuth2ClientFilterRegistration(OAuth2ClientContextFilter oAuth2ClientContextFilter)
{
  FilterRegistrationBean registration = new FilterRegistrationBean();
  registration.setFilter(oAuth2ClientContextFilter);
  registration.setOrder(-100);
  return registration;
}

private Filter ssoFilter()
{
  OAuth2ClientAuthenticationProcessingFilter googleFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/google");
  OAuth2RestTemplate googleTemplate = new OAuth2RestTemplate(google(), oAuth2ClientContext);
  googleFilter.setRestTemplate(googleTemplate);
  CustomUserInfoTokenServices tokenServices = new CustomUserInfoTokenServices(googleResource().getUserInfoUri(), google().getClientId());
  tokenServices.setRestTemplate(googleTemplate);
  googleFilter.setTokenServices(tokenServices);
  tokenServices.setUserRepo(userRepo);
  tokenServices.setPasswordEncoder(passwordEncoder);
  return googleFilter;
}
Sampeyan uga kudu nambah panyaring anyar menyang fungsi konfigurasi (HttpSecurity http):
http.addFilterBefore(ssoFilter(), UsernamePasswordAuthenticationFilter.class);
Filter uga kudu ngerti yen klien wis ndhaptar liwat Google. Anotasi @ConfigurationProperties nemtokake sifat konfigurasi sing kudu digoleki ing application.properties.
@Bean
@ConfigurationProperties("google.client")
public AuthorizationCodeResourceDetails google()
{
  return new AuthorizationCodeResourceDetails();
}
Kanggo ngrampungake otentikasi, sampeyan kudu nemtokake titik pungkasan informasi pangguna Google:
@Bean
@ConfigurationProperties("google.resource")
public ResourceServerProperties googleResource()
{
  return new ResourceServerProperties();
}
Sawise ndhaptar aplikasi kita ing Google Cloud Platform , kita bakal nambah properti kanthi awalan sing cocog kanggo application.properties:
google.client.clientId=yourClientId
google.client.clientSecret=yourClientSecret
google.client.accessTokenUri=https://www.googleapis.com/oauth2/v4/token
google.client.userAuthorizationUri=https://accounts.google.com/o/oauth2/v2/auth
google.client.clientAuthenticationScheme=form
google.client.scope=openid,email,profile
google.resource.userInfoUri=https://www.googleapis.com/oauth2/v3/userinfo
google.resource.preferTokenInfo=true

Sorotan ndhaptar aplikasi nganggo Google Cloud Platform

Path: API lan Layanan -> Jendela Panjaluk Akses OAuth Kredensial:
  • Jeneng aplikasi: Formulir login spring lan tutorial OAuth2
  • Alamat email dhukungan: email sampeyan
  • Cakupan kanggo Google API: email, profil, openid
  • Domain resmi: me.org
  • Link menyang kaca utama aplikasi: http://me.org:8080
  • Link menyang kabijakan privasi app: http://me.org:8080
  • Link menyang syarat panggunaan aplikasi: http://me.org:8080
Kredensial:
  • Tipe: Aplikasi Web
  • Judul: Formulir login musim semi lan tutorial OAuth2
  • Sumber JavaScript sing diidini: http://me.org, http://me.org:8080
  • URI pangalihan sing diidini: http://me.org:8080/login, http://me.org:8080/login/google
Cathetan: amarga Google ora pengin nggarap alamat localhost:8080, tambahake baris "127.0.0.1 me.org" utawa sing padha karo file C:\Windows\System32\drivers\etc\hosts ing pungkasan. Ingkang utama yaiku domain kasebut ing wangun klasik.

CustomUserInfoTokenServices

Apa sampeyan sok dong mirsani tembung Custom ing katrangan fungsi filter? kelas CustomUserInfoTokenServices. Ya, kita bakal nggawe kelas dhewe karo blackjack lan kemampuan kanggo nyimpen pangguna ing database! Nggunakake trabasan keyboard Ctrl-N ing IntelliJ IDEA, sampeyan bisa nemokake lan ndeleng carane UserInfoTokenServicesstandar dileksanakake. Ayo nyalin kode kasebut menyang kelas sing mentas digawe CustomUserInfoTokenServices. Umume bisa ditinggalake. Sadurunge ngganti logika fungsi, ayo nambah UserRepolan minangka lapangan pribadi saka kelas PasswordEncoder. Ayo nggawe setter kanggo wong-wong mau. Ayo tambahake @Autowired UserRepo userRepo menyang kelas SecurityConfig. We ndeleng carane pitunjuk kanggo kesalahan ing cara nggawe Filter ilang, lan kita bungah. Napa @Autowired ora bisa ditrapake langsung menyang CustomUserInfoTokenServices? Amarga kelas iki ora bakal Pick munggah katergantungan, awit iku ora ditandhani karo spring sembarang anotasi, lan konstruktor digawe kanthi tegas nalika Filter diumumake. Mulane, mekanisme DI Spring ora ngerti babagan iki. Yen kita menehi annotate @Autowired babagan apa wae ing kelas iki, kita bakal entuk NullPointerException nalika digunakake. Nanging liwat setter eksplisit kabeh bisa digunakake banget. Sawise ngleksanakake komponen sing dibutuhake, obyek utama kapentingan dadi fungsi loadAuthentication, ing ngendi Peta<String, Object> kanthi informasi babagan pangguna dijupuk. Ing proyek iki aku ngetrapake nyimpen pangguna sing mlebu liwat jaringan sosial menyang database. Amarga kita nggunakake akun Google minangka panyedhiya OAuth2, kita mriksa apa peta ngemot kolom "sub" sing khas kanggo Google. Yen ana, tegese informasi babagan pangguna ditampa kanthi bener. Kita nggawe pangguna anyar lan simpen ing database.
@Override
public OAuth2Authentication loadAuthentication(String accessToken)
     throws AuthenticationException, InvalidTokenException
{
  Map<String, Object> map = getMap(this.userInfoEndpointUrl, accessToken);

  if(map.containsKey("sub"))
  {
     String googleName = (String) map.get("name");
     String googleUsername = (String) map.get("email");

     User user = userRepo.findByGoogleUsername(googleUsername);

     if(user == null)
     {
        user = new User();
        user.setActive(true);
        user.setRoles(Collections.singleton(Role.USER));
     }

     user.setName(googleName);
     user.setUsername(googleUsername);
     user.setGoogleName(googleName);
     user.setGoogleUsername(googleUsername);
     user.setPassword(passwordEncoder.encode("oauth2user"));

     userRepo.save(user);
  }

  if (map.containsKey("error"))
  {
     this.logger.debug("userinfo returned error: " + map.get("error"));
     throw new InvalidTokenException(accessToken);
  }
  return extractAuthentication(map);
}
Nalika nggunakake sawetara panyedhiya, sampeyan bisa nemtokake opsi beda ing siji CustomUserInfoTokenServices, lan ndhaftar kelas beda layanan padha ing cara deklarasi Filter. Saiki pangguna lan OAuth2Authentication bisa tumindak minangka Principal. Amarga kita nganggep pangguna ing Layanan Pangguna sadurunge ngemot pangguna liwat data Google, aplikasi kasebut bakal digunakake kanggo loro jinis pangguna. Kita ngowahi pengontrol kaca utama proyek supaya pangalihan pangguna sing mlebu nggunakake OAuth2 menyang kaca cathetan.
@GetMapping("/")
public String index(Principal principal)
{
  if(principal != null)
  {
     return "redirect:/notes";
  }
  return "index";
}

Bukak pungkasan proyek

Sawise owah-owahan kosmetik cilik lan nambah tombol metu, kita nindakake peluncuran pungkasan proyek kasebut.
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 8
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 9
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 10
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 11
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 12
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 13
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 14
Ayo ngenalake login biasa liwat email lan OAuth2 menyang Keamanan Spring nggunakake conto layanan cathetan - 15
Pangguna kasil mlebu liwat formulir biasa lan liwat akun Google. Iki sing dikarepake! Muga-muga artikel iki wis ngrampungake sawetara poin babagan nggawe aplikasi web, ngamanake karo Spring Security, lan nggabungake macem-macem cara login. Kanthi kode proyek lengkap sampeyan bisa
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION