26 Aralık 2019 Perşembe

SpringSecurity RememberMeConfigurer Sınıfı

Giriş

RememberMeServices Nedir?
RememberMeServices yazısına taşıdım.

Persistent Cookie İsmi
Çerezin varsayılan ismi "remember-me" şeklindedir. rememberMeCookieName() çağrısı ile çerez ismi değiştirilebilir.

Persistent Cookie Geçerlilik Süresi
Çerezin geçerlilik süresi tokenValiditySeconds() metodu ile değiştirilir. Varsayılan değer sanırım 2 hafta.

Spring Security Tarafından Sunulan RememberMe Servisleri
Açıklaması şöyle.
Spring Security provides the necessary hooks for these operations to take place, and has two concrete remember-me implementations. One uses hashing to preserve the security of cookie-based tokens and the other uses a database or other persistent storage mechanism to store the generated tokens.
Her iki sınıf ta AbstractRememberMeServices ata sınıfından kalıtır.

1. Simple Hash-Based Token Approach Servisi
Bu servisi gerçekleştiren sınıf TokenBasedRememberMeServices sınıfı. 

2. Persistent Token Approach
Bu servisi gerçekleştiren sınıf PersistentTokenBasedRememberMeServices sınfı. Bu sınıf bir dataSource gerektirir. Ayrıca "persistent_logins" isimli bir tablo kullanır.

processAutoLoginCookie metodu
Persistent Cookie okunur ve tokenReposity.getTokenForSeries() çağrısı yapılır. Bu kullanıcıya ait PersistentRememberMeToken yüklenmeye çalışılır. Eğer cookie bulunamazsa, kullanıcının cookie bilgisi çalınmıştır.

onLoginSuccess metodu
tokenRepository'ye yeni bir PersistentRememberMeToken kaydedilir

key metodu
Bu metoda geçilen değer RememberMeAuthenticaitonProvider tarafından kullanılır.

Örnek
Şöyle yaparız.
rememberMe().key("superUniqueAndSecretKey")
rememberMeCookieName metodu
Şöyle yaparız.
//Persistant cookie
http.rememberMe()
  .rememberMeCookieName("example-app-remember-me")
  .tokenRepository(persistentTokenRepository())
  .tokenValiditySeconds(24 * 60 * 60)
  .and()
rememberMeServices metodu
Örnek
Şöyle yaparız.
HttpSecurity http = ...;
...
.and()
.rememberMe().rememberMeServices(rememberMeService())
...


@Bean
public TokenBasedRememberMeServices rememberMeService() {
  TokenBasedRememberMeServices tbrms = 
    new TokenBasedRememberMeServices("rememberMe", userDetailsService);
  tbrms.setAlwaysRemember(true);
  return tbrms;
}
tokenRepository metodu
Şöyle yaparız.
// Configuration for Remember me function (remember 24h).
http
  ....
  and()
  .rememberMe().tokenRepository(persistentTokenRepository())
  .tokenValiditySeconds(1 * 24 * 60 * 60);


@Bean
public PersistentTokenRepository persistentTokenRepository() {
  JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
  jdbcTokenRepository.setDataSource(dataSource);
  return jdbcTokenRepository;
}

Hiç yorum yok:

Yorum Gönder