Spring Boot Uygulamalarında Security Basic Authentication Kullanım Örneği
Spring Boot Dersleri’ne devam ediyoruz.
Bu Spring Boot Ders’inde uygulamamıza basic authentication yöntemi ile güvenlik işleminin nasıl yapıldığıına bakacağız.Uygulamamız maven projesi olacak ve kaynak kodlara github adresimden erişebileceksiniz.
Uygulama yapısı aşağıdaki gibi olacaktır.
pom.xml dosyamız yani uygulama bağımlılıklarımız aşağıdaki gibidir.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.burakkutbay</groupId>
<artifactId>springbootsecuriybasicauthrestapi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootsecuriybasicauthrestapi</name>
<description>Spring Boot Security Basic Authentication – Secure REST API</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Code language: HTML, XML (xml)
Şimdi controllerımızı oluşturalım ve sonrasında ne yaptığımıza bakalım.
package com.burakkutbay.springbootsecuriybasicauthrestapi;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AppController {
@RequestMapping("/user")
public String loginUser(){
return "User kullanıcı girişi başarılı";
}
@RequestMapping("/admin")
public String loginAdmin(){
return "Admin kullanıcı girişi başarılı";
}
}
Code language: CSS (css)
Spring Boot uygulamamızda user ve admin rolleri bulunmaktadır ve @RequestMapping anotasyonu kulanarak localhost:8080/user ve localhost:8080/admin adreslerine erişim sağlanacak ve kullanıcı adı ve şifresi doğru olursa tarayıcıda giriş başarılı mesajı verecektir.
Spring Security bağımlılığımızı kullanarak güvenlik tipini giriş yapacak kullanıcının adlarını ve şifrelerini belirleyeceğiz. Kodu yazdıktan sonra ne yaptığımızı açıklayacağım.
package com.burakkutbay.springbootsecuriybasicauthrestapi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and().authorizeRequests()
.antMatchers("/user").hasRole("USER")
.antMatchers("/admin").hasRole("ADMIN")
.and()
.csrf().disable();
}
@Autowired
public void configureAuthGlobal(AuthenticationManagerBuilder auth){
try {
auth.inMemoryAuthentication()
.withUser("user").password(passwordEncoder().encode("password")).roles("USER")
.and()
.withUser("admin").password(passwordEncoder().encode("password")).roles( "ADMIN");
} catch (Exception e) {
e.printStackTrace();
}
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Code language: JavaScript (javascript)
@EnableWebSecurity : Spring Security işleminin bu class tarafından yönetileceğini belirtiyoruz.
configure : metodumuz WebSecurityConfigurerAdapter tarafından override edilen bir metoddur.
httpBasic(): Güvenlik tipini belirtmektedir.
antMatchers: Kullanıcıyı eşleştirme kontrolü yapar.
hasAnyRole: Kullanıcıya alması gereken rolü belirtiyoruz.
configureAuthGlobal: Bu yaptığımız metodumuz ile kullanıcının bilgilerinin hafızada tutulacağını şifrelerinin passwordEncoder ile şifreliyoruz.
Programımızı çalıştıracak ana classımızı yazalım.
package com.burakkutbay.springbootsecuriybasicauthrestapi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages = "com.burakkutbay.springbootsecuriybasicauthrestapi")
@SpringBootApplication
public class SpringbootsecuriybasicauthrestapiApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootsecuriybasicauthrestapiApplication.class, args);
}
}
Code language: JavaScript (javascript)
Ve sonuca bakalım.
No Comment! Be the first one.