9 Aralık 2019 Pazartesi

SpringSecurity HttpSecurity Sınıfı - Builder Sınıfıdır

Giriş
WebSecurityConfigurerAdapter tarafından kullanılır. Bir endpoint'e erişimin nasıl olacağını ayarlamak içindir. İskeketi şöyledir.
@Configuration
@EnableWebSecurity
public static class MySecurityConfig extends WebSecurityConfigurerAdapter {

  public MySecurityConfig() {
    super();
  }

  @Override
  public void configure(HttpSecurity http) throws Exception {
    ...
  }
}
Genel Kullanım
Örnek
Çoğu örnekte şöyle yapılıyor.
@Override
protected void configure(HttpSecurity http) throws Exception {
  http.antMatcher("/**")                                                   (1)
    .authorizeRequests()
      .antMatchers("/", "/login**", "/webjars/**").permitAll()             (2)
      .anyRequest().authenticated()                                        (3)
    .and().exceptionHandling()
      .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/")) (4)
    ...
}
(1) ile işaretli satırda önce her url koruma altına alınıyor.
Benim anladığım (1) ile işaretli satıra gerek yok. Zaten her şey doğrulama ile erişilecek şekilde başlıyor.

(2) ile işaretli satırda doğrulama olmadan erişilebilecek adresler belirtiliyor. Yani "/register","/login" mutlaka lazım. Buraya "/logout" koymamak lazım çünkü o zaman login olmamış kullanıcı bir başkasını logout edebilir.
(3) ile işaretli satır mutlaka lazım. Geri kalan her şeyi koruma altına alıyor.
(4) ile başlayan satır mutlaka lazım. Doğrulanmamış kullanıcıyı ana sayfaya yönlendiriyor.

(2) ve (3) ExpressionUrlAuthorizationConfigurer Sınıfı tarafından gerçekleştirilir.
(4) ise ExceptionHandlingConfigurer tarafından gerçekleştirilir.

addFilterAfter metodu
HttpSecurity Sınıfı Filtre Metodları yazısına taşıdım

addFilterAt metodu

authorizeRequests metodu
ExpressionUrlAuthorizationConfigurer Sınıfı yazısına taşıdım.

csrf metodu
CsrfConfigurer Sınıfı yazısına taşıdım.

cors metodu
CorsConfigurer Sınıfı yazısına taşıdım.

exceptionHandling metodu
ExceptionHandlingConfigurer nesnesi döner.

formLogin metodu
FormLoginConfigurer Sınıfı yazısına taşıdım.

headers metodu
HeadersConfigurer nesnesi döner.

httpBasic metodu
HttpBasicConfigurer Sınıfı yazısına taşıdım.

logout metodu
LogoutConfigurer Sınıfı yazısına taşıdım.

oauth2Client metodu
OAuth2ClientConfigurer Sınıfı yazısına taşıdım.

oauth2Login metodu
OAuth2LoginConfigurer Sınıfı yazısına taşıdım.

oauth2ResourceServer metodu
OAuth2ResourceServerConfigurer Sınıfı yazısına taşıdım.

rememberMe metodu
RemembermeConfigurer Sınıfı yazısına taşıdım

requestMatcher metodu
Sunucunun cevap vereceği adresleri belirtir
Örnek
Şöyle yaparız
@Override
protected void configure(HttpSecurity http) throws Exception {
  http
  .requestMatcher(new NegatedRequestMatcher(new AntPathRequestMatcher("/api/**")))
  .authorizeRequests()
  ...
}
requestMatchers metodu
RequestMatcherConfigurer Sınıfı yazısına taşıdım.

requiresChannel metodu
ChannelSecurityConfigurer Sınıfı yazısına taşıdım

securityContext metodu
SecurityContext bilgisinin HttpSession'da saklanması için şöyle yaparız.
.and().csrf().csrfTokenRepository(csrfTokenRepository())
.and().securityContext().securityContextRepository(myContextRepository())
Kendi sınıfımı bean olarak tanıtmak için şöyle yaparız.
@Bean
public MyHttpSessionSecurityContextRepository myContextRepository() {
  return new MytHttpSessionSecurityContextRepository();
}
Sınıfım şöyledir. HttpSessionSecurityContextRepository sınıfından kalıtır.
public class MyHttpSessionSecurityContextRepository extends
  HttpSessionSecurityContextRepository {
  ...
}
sessionManagement metodu
SessionManagementConfigurer Sınıfı yazısına taşıdım.

Hiç yorum yok:

Yorum Gönder