Spring Boot Uygulamalarında Security Basic Authentication Kullanım Örneği

Spring Boot
Spring Dersleri

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.

Uygulama Dosya Yapısı

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>

Ş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ı";
    }
}

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();
    }
}

@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);
    }

}

Ve sonuca bakalım.

Adres Tıklandığında giriş ekranı
Kullanıcı girişi başarılı olduğunda karşılanacak ekran.
Kaynak Kodlara Github'tan UlaşBu yazıda anlatılan projenin kaynak kodlarını Github üzerinden indirebilirsiniz.
Önceki Ders: Spring Boot Hata SayfalarıYapmak
Spring Boot Dersleri
Sonraki Ders: 

Leave a Reply

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

Burak KUTBAY 2010 - 2019
%d blogcu bunu beğendi: