Twitter Youtube Github
Burak Kutbay'ın Kişisel Blog'u |

Type and hit Enter to search

  • Eğitim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • Spring Core
  • Spring Örnekleri
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale
Spring Security

Spring Security In-Memory Authentication ve Authorization

Paylaş


Spring Security Dersleri‘ne devam ediyorum.

Bu yazıda yazılımımızın üzerinde hafızada tutularak yapılan erişim ve yetkilendirme işleminin nasıl yapıldığından bahsedeceğim.

In-Memory Authentication ve Authorization uygulamanın bellek içerisinde Spring Security’de kimlik doğrulamayı işlemenin yoludur. Bu yöntemde roller, parolalar ve kullanıcı adı gibi bilgileri bellek üzerinde Spring uygulamamız çalışana kadar doğrulama yapabiliriz.

Bu yöntemin bir dezavantajı bulunmaktadır sunucu durdurulursa, bellek temizlenir ve doğrulama yapamayız. Bu yöntem genellikle sabit kullanıcı ve sabit rolleri olan fazla kullanıcısı bulunmayan projeler için rahatlıkla kullanılabilir.

Projemizi oluşturalım, bunun için bağımlılıklarımız aşağıdaki gibi olacaktır.

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Code language: HTML, XML (xml)

Endpointlerimizi oluşturalım bu endpointlerde

  • index -> Giriş yapan, yapmayan herkes erişebilecek.
  • dashboard -> Sadece giriş yapan ve rolü user ve admin olan kullanıcılar erişebilecek.
  • admin -> Sadece giriş yapan ve rolü admin olan kullanıcılar erişebilecek.
@RestController public class UserController { @GetMapping("/admin") public String admin(){ return "Admine özel mesajdır"; } @GetMapping("/dashboard") public String dashboard() { return "Üyelere özel mesajdır"; } @GetMapping("/index") public String index(){ return "Merhaba. Üye Olun"; } }
Code language: PHP (php)

Controllerimizi tamamladık.

Security configuration kısmına gelelim.

HttpSecurity kısmında hasAnyRole diyerek aynı url’e birden fazla rolde olan kullanıcının girebilmesi için rolleri yazabiliyoruz, eğer bir url’e sadece bir rol tanımlamak istersek hasRole içerisine yazmamız yeterli olmaktadır.

Spring Security 5 ile birlikte password şifreleme varsayılan olarak desteklenmektedir. Kullanıcılarımızın şifreleri belirli bir algoritma ile encryptli ise bunu kolayca doğrulamak için şifre kısmının başına bu aşağıda yer alan anahtar kelimeleri yazmamız yeterli olmaktadır.

  • {bcrypt} -> BCryptPasswordEncoder,
  • {pbkdf2} -> Pbkdf2PasswordEncoder, 
  • {scrypt} -> SCryptPasswordEncoder,
  • {sha256} -> StandardPasswordEncoder.

Eğer encrypt edilmemiş bir şifre tanımlamak istersek {noop} yazmamız gerekmektedir aksi halde aşağıdaki hatayı alırız.

ava.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
Code language: CSS (css)

{noop} yazmak yerine aşağıdaki kod bloğunu da ekleyebiliriz ancak deprecated olmuş bir yöntemdir.

@Bean public PasswordEncoder getPasswordEncoder(){ return NoOpPasswordEncoder.getInstance(); }
Code language: CSS (css)

In-Memory Auth kullanabilmek için AutehnticationManagerBuilder kullanmaktayız. kullanıcı, şifre ve rol tanımlamalarını yapabiliyoruz

@EnableWebSecurity @Configuration public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.httpBasic(); http.formLogin(); http.authorizeHttpRequests() .antMatchers("/dashboard").hasAnyRole("admin","user") .antMatchers("/admin").hasRole("admin") .and() .authorizeHttpRequests() .antMatchers("/index") .permitAll(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("admin").password("{noop}1234").roles("admin") .and() .withUser("deneme").password("{noop}1234").roles("user"); } }
Code language: PHP (php)

Projemizi çalıştırdıktan sonra ilgili sayfalara giriş yapabiliriz. Yetkisiz bir sayfaya erişmek istediğimizde aşağıdaki hataya benzer bir mesaj alırız.

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. There was an unexpected error (type=Unauthorized, status=401). Unauthorized
Code language: JavaScript (javascript)

Bir sonraki yazıda görüşmek üzere.

Tags:

spring security derslerispring security örnek

Paylaş

Diğer Yazılar

RabbitMQ Dersleri
Previous

RabbitMQ Direct Exchange Java Publisher / Consumer Uygulaması

RabbitMQ Dersleri
Next

RabbitMQ Fanout Exchange Java Publisher / Consumer Uygulaması

Next
RabbitMQ Dersleri
22 Mart 2022

RabbitMQ Fanout Exchange Java Publisher / Consumer Uygulaması

Previews
03 Şubat 2022

RabbitMQ Direct Exchange Java Publisher / Consumer Uygulaması

RabbitMQ Dersleri

No Comment! Be the first one.

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Spring-Security-Dersleri-Veritabani-Yetkilendirme-User-Detail-Kullanimi-

Spring Security Dersleri Veritabanı Yetkilendirme User Detail Kullanımı 

Burak Kutbay'ın Kişisel Blog'u |

© 2008 - ∞, Her hakkı saklıdır.

Link

  • Hakkımda
  • İletişim
  • Arşiv

Kategori

Cloud
Amazon Web Services
Vue.js
Gradle
Node.js
Android
Struts
Redis
Röportaj
Spring Data
Spring Cloud Stream
XCode
Debezium
Mikroservis Mimarisi
Video
Spring Native
iPhone Uygulama Geliştirme
Objective C
JPA
Spring Security
PostgreSQL
Apache Kafka
Git
Servlet
Yaptığım Projeler
Maven
Design Patterns
DevOps
Linux
RabbitMQ
PrimeFaces
JDBC
Spring Jdbc Template
Spring
Spring MVC
Manset
Google
Spring Cloud
OCA Java SE 8
Spring Core
Quarkus
Microsoft
Veritabanı
Tanıyalım
Java SE
Hibernate
Teknoloji
Okuduğum Kitaplar
Java Server Faces
Yazılım Mühendisliği
C Sharp
Spring Boot
Java
Günlüğüm
Java Server Page
Makale

Takip Et

Twitter Youtube Github
  • Eğitim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • Spring Core
  • Spring Örnekleri
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale