9 Eylül 2020 Çarşamba

SpringSecurity LogoutConfigurer Sınıfı - HttpSecurity İle Kullanılır

Giriş
Açıklaması şöyle. Yani çıkış yapan kullanıcının her türlü bilgisini silmek gerekir
On Logout you have to correctly destroy the existing session and its association with any data. Otherwise, these sessions could be used after logout. (It is not enough to remove the cookie from client browser!)

clearAuthentication metodu
Bu seçeneğin varsayılan değeri true. Yani aslında bir şey yapmaya gerek yok.
Örnek
Şöyle yaparız
logout()
  .clearAuthentication(false)
  .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
  .logoutSuccessUrl("/?logout")
  .permitAll();
deleteCookies metodu
Açıklaması şöyle
By default, when logging out of a Spring application, Spring removes the current session (technically it invalidates it) along with the corresponding session cookie (typically JSESSIONID). Finally, Spring redirects the user to a new page (which by default is /login?logout). Other than removing any ID and access tokens from your application’s session, nothing OAuth 2.0/OIDC specific happens.
Örnek
JSESSIONID çerez olduğu için HttpHeaders sınıfının "Set-Cookie" alanı ile gönderilir. Bu alanda kaydedilecek Cookie'lerin listesi vardır. Bazı Cookie'ler remember-me, JSESSIONID olabilir.
JSESSIONID içeriği şuna benzer
"JESSIONID=BA16....;Path=/;HttpOnly"
JESSIONID çerezi servlet container tarafından yönetilir. Bu metodu JSESSIONID ile çağırırsak session bilgisi de silinir. Şöyle yaparız.
logout()
  .logoutUrl("/logout")
  .logoutSuccessUrl("/login")
  .deleteCookies("auth_code", "JSESSIONID")
  .invalidateHttpSession(true)
invalidateHttpSession
Bu seçeneğin varsayılan değeri true. Yani aslında bir şey yapmaya gerek yok.

Örnek
Şöyle yaparız.
http...
  .and().logout().invalidateHttpSession(false)
logoutRequestMatcher metodu
Örnek
Şöyle yaparız.
http
  .logout()
  .logoutRequestMatcher(new AntPathRequestMatcher("/logout-gimli-user")).permitAll()
  .deleteCookies("JSESSIONID", "sessionid" /*, "sessdetail", "countfr"*/ );
logoutSuccessHandler metodu
Normalde Http 301 göndererek /login sayfasına tekrar yönlendirilir. Başka bir HTTP kodu göndermek için bu metodu kullanırız.
Örnek
Şöyle yaparız
http.logout()
  .logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)));
logoutSuccessUrl metodu
Açıklaması şöyle. Normalde Http 301 göndererek /login sayfasına tekrar yönlendirilir. Eğer /login sayfası yerine başka bir sayfaya yönlendirmek istersek bu metodu kullanırız.
After we logout, redirect to root page, by default Spring will send you to /login?logout
Örnek
Şöyle yaparız
@Configuration
static class SecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      // allow anonymous access to the root page
      .antMatchers("/").permitAll()
      // all other requests
      .anyRequest().authenticated()
      // After we logout, redirect to root page,
      // by default Spring will send you to /login?logout
      .and().logout().logoutSuccessUrl("/")
      // enable OAuth2/OIDC
      .and().oauth2Login();
  }
}
Örnek
Şöyle yaparız.
httpSecurity.logout().logoutSuccessUrl("/login?logout");       
logoutURL metodu
Normalde /logout sayfası kullanılır. Bu sayfa yerine başka bir sayfa kullamak istersek bu metodu kullanınırz.

Örnek
Şöyle yaparız.
http...
  .and()
  .logout()
  .logoutUrl("/api/logout")
  .logoutSuccessHandler(...)
Örnek
Şöyle yaparız.
http.authorizeRequests().antMatchers("/settings").hasAuthority("Administrator")
  .anyRequest().authenticated()
  .and()
    ...
  .logout()
    .logoutUrl("/logout")
    .logoutSuccessUrl("/login")
    .logoutSuccessHandler(logoutSuccessHandler)
  .and()
            ...
permitAll metodu
Örnek
Örnek saçma ancak herkesin logout olabilmesi için şöyle yaparız.
http...
  .logout()
  .permitAll();

1 yorum: