17 Aralık 2019 Salı

SpringSecurity JdbcUserDetailsManagerConfigurer Sınıfı - Kendi Tablolarımızı Kullanması Sağlar

Giriş
Normalde spring kendi haline bırakılırsa veri tabanındaki kullanıcı bilgileri için tabloları üretir. Ancak mevcut tablolar varsa bu sınıfı kullanmak gerekir. Bu sınıf DaoAuthenticaitonProvider Tarafından Sarmalanan JdbcUserDetailsManager Nesnesi Yaratır

Kullanım
4 tane metodu çağırmak gerekir.
1. dataSource() - Veri tabanı için bağlantıyı tanımlar
2. passwordEncoder() - Genellikle BCryptPasswordEncoder kullanılır
3. usersByUserNameQuery() - Kullanıcıların tanımlı olduğu tabloya erişmek için sql cümlesi. Bu sql cümlesinde 3 tane sütun olmak zorunda. Bunlar username, password ve enabled
Kullanıcı nesnesi User nenesidir ve UserDetails arayüzünden kalıtır.

4. authoritiesByUserNameQuery() - Rollerin tanımlı olduğu tabloya erişmek için sql cümlesi. Bu sql cümlesinde 2 tane sütun olmak zorunda. Bunlar username, ve role
Rol nesnesi SimpleGrantedAuthority nesnesidir ve GrantedAuthority arayüzünden kalıtır.

Örnek
Şöyle yaparız. Burada hem kullanıcı ismi hem de rolleri "users" isimli tabloda.
@Autowired
private DataSource dataSource;
@Bean
public PasswordEncoder encoder() {
  return new BcryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  auth.jdbcAuthentication()
    .dataSource(dataSource)
    .passwordEncoder(encoder())
    .usersByUsernameQuery("SELECT login, pass, active FROM users WHERE login = ?")
    .authoritiesByUsernameQuery("SELECT login, role FROM users WHERE login = ?")
}





Hiç yorum yok:

Yorum Gönder