in Spring

Spring Security – MongoDB – Thymeleaf Örnek Uygulama

spring1
Şu sıralar Spring Boot ile uygulama geliştirme üzerinde çalışıyorum. Özellikle XML konfigürasyonlarıyla devamlı vakit geçirdiğim için başlangıçta biraz garip geldi.”Neyi benim için yapıyor? Bağlantıları nasıl sağlıyor? Varsayılan(Default) ayarları nedir?” gibi sorular kafamı oldukça karıştırdı.Fakat takıldığın yerde gerekli arayüzleri implement ederek müdahale etme esnekliği konuyu kavramam konusunda oldukça yardımcı oldu.Spring Boot’un sunduğu hızlı geliştirme imkanı gerçekten çok etkileyici. Bunu belirtmeden geçemeyeceğim. Şuan Spring Security,Thymeleaf,Spring MVC,MongoDB kullanarak bir blog projesi yapıyorum. Her zaman yaptığım üzere çalışan en küçük kod parçasını yedeklemek açısından Github’ta paylaşıyorum. Burada da faydalı olması açısından açıklayacağım.Evet, bu kadar gevezelik yeter kodlara geçelim.

Aşağıda pom.xml dosyamızı görüyoruz.Eğer kendi isteğinize göre bir başlangıç projesi oluşturmak istiyorsanız, start.spring.io adresine gidip isteğinize göre düzenleyebilirsiniz.
Ben MongoDB,Security,Thymeleaf ve Spring MVC kullanacağım için onları seçtim ve pom.xml dosyası bu şekilde ayarlandı.Spring Boot kendisini parent proje olarak ekliyor.Böylece belirttiğimiz bağımlılıkları kendi deposundan ekliyor.

Pom.xml ile işimiz bittiğine göre model sınıfımızı oluşturalım. Bu sınıf MongoDB veritabanımızdaki bir documents’e karşılık gelecek. Bu sınıf vasıtasıyla User isimli dökümanı yöneteceğiz.

Hemen ardından repository arayüzümüzü oluşturalım. Burada dikkat edilecek nokta repository sınıfımızın Spring Data’nın MongoRepository arayüzünü extends ediyor olması. Bu sayede her seferinde tekrar eden crud işlemleri gibi boilerplate tabir edilen gereksiz kod yığınlarından da kurtulmuş oluyoruz.Ekstra olarak findByUsername() adında bir method tanımladım.Bunu ilerde login işlemi için kullanacağız.

Şimdi de iş katmanını oluşturalım.Arayüzümüzü oluşturuyoruz.

Daha sonra implement ediyoruz.Gerekli metodları override ediyoruz.

Şimdi buraya kadar herşey veritabanı ve iş katmanının düzenlenmesiyle ilgiliydi. Sıra Spring Security’i partiye katmakta.
Spring Security’de authentication yani kimlik doğrulama için UserDetailsService adında bir arayüzü(interface) implement etmemiz gerekiyor.Bu arayüz aşağıdaki metodu içermektedir.

UserDetails loadUserByUsername(String username);

Bunu override ederek formdan gelen username parametresiyle veritabanımızdan nesnemizi çekiyoruz.Böylece Spring Security bizim yerimize kullanıcı adı,şifre ve yetki yönetimini otomatik olarak yapıyor.

Hmm, Tamam iş katmanımızda bulunan UserService sayesinde veritabanından nesnemizi çektik ama UserSecurity diye bir sınıf geri dönüyor burada.Hem de bizim çektiğimiz nesneyi constructor’una parametre alarak!
Korkacak birşey yok. Belki biraz karışık gelebilir ama projenin son halinde daha anlaşılır olacaktır.
Bu UserSecurity sınıfı benim oluşturduğum bir sınıf.Spring Security’nin içinde bulunan User sınıfını extends ediyor. Constructor’dan gelen nesnenin username,password ve role değerlerini üst sınıfın constructor’una gönderiyor.Böylece dönüş tipi olarak bu sınıfı gönderebiliyoruz.Bu sınıf yerine loadUserByUsername() methodumuzun içinden direk yeni nesne oluşturabilirdik.Ama böyle işleri ayırmış oluyoruz.

Ve son olarak Spring Security için ayarları yapma sırası. Sınıfımız WebSecurityConfigurerAdapter sınıfını extends etmeli ve @Configuration,@EnableWebMvcSecurity anatasyonları ile tanımlanmalı.

Unutmadan Controller ayarlamasınıda yapalım.

Burada dikkat etmemiz gereken ufak bir nokta var. Login olduktan sonra login sayfasına erişimi engellemek için ufak bir ekleme yapıyoruz. Böylelikle eğer login olunmuşsa “/admin/dashboard” adresine yönlendirileceğiz.

Ve son olarak main metodumuzun bulunduğu sınıfımızı bu şekilde düzenliyoruz.Başlangıçta veritabanı otomatik oluşturacak ve demo için bir nesne ekleyecek.Böylece direk test edebileceğiz.

Derleme İşlemi
Komut satırından proje dizinine gidip “mvn spring-boot:run” komutunu çalıştırıyoruz. Ardından “localhost:8080/login” adresine gidiyoruz.

login

Giriş yaptığımızda /admin/dashboard adresine yönlendiriliyoruz.

dashboard

Umarım bu makale temelleri anlamak açısından yararlı olmuştur.

Kodlara ulaşmak için Github linkine bakabilirsiniz.

Spring Security – MongoDB – Thymeleaf

Yorum yaz

Comment