ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Security] ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์˜์กด์„ฑ ์ถ”๊ฐ€
    Spring/Spring Secutiry 2024. 1. 9. 21:16

     

     

     

    ๐Ÿ‘‹์•ˆ๋…•ํ•˜์„ธ์š”. ๊น€์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.

    ์ด๋ฒˆ ๊ธ€์—์„  ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๋ญ”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    ์ผ๋‹จ ์ฒซ ๋ฒˆ์งธ๋กœ ํ•„์š”ํ•œ ์ปจํŠธ๋กค๋Ÿฌ ๋จผ์ € ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     


     

    ๊ทธ๋ƒฅ ๊ฐ™์€ ๊ฒฝ๋กœ์— SecurityController ์ƒ์„ฑ

     

    SecurityController
    @RestController
    class SecurityController {
        @GetMapping("/")
        fun index(): String{
            return "home"
        }
    }

    Get๋ฉ”์„œ๋“œ๋กœ ๊ฐ„๋‹จํžˆ homeํ…์ŠคํŠธ๋งŒ ๋ฆฌํ„ดํ•˜๋„๋ก ๊ตฌ์„ฑ ํ›„ ์‹คํ–‰์‹œ์ผœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    home์ด helloworld๋กœ ๋ณด์ด๋Š”๋ฐ ํ˜น์‹œ ๋‚˜๋งŒ ๊ทธ๋Ÿฐ๊ฐ€..

     

    ๊ท€์—ฌ์šด home์ด ์งœ์ž” ํ•˜๊ณ  ์ž˜ ๋‚˜์˜ต๋‹ˆ๋‹ค.

     

    ํ•˜์ง€๋งŒ ์ด๊ณณ์—” ์•„๋ฌด๋Ÿฐ ๋ณด์•ˆ์กฐ์น˜๊ฐ€ ์—†์–ด ๋ˆ„๊ตฌ๋‚˜ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ ์šฉํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    ๋จผ์ € ์Šคํ”„๋ง์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์˜์กด์„ฑ ์ฃผ์ž…ํ•ด์•ผ ํ•˜๋‹ˆ build.gradle.kts๋กœ ๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    build.gradle.kts
    import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
    
    plugins {
    	id("org.springframework.boot") version "2.7.0"
    	id("io.spring.dependency-management") version "1.1.4"
    	kotlin("jvm") version "1.9.21"
    	kotlin("plugin.spring") version "1.9.21"
    }
    
    group = "io.security"
    version = "0.0.1-SNAPSHOT"
    
    java {
    	sourceCompatibility = JavaVersion.VERSION_11
    }
    
    repositories {
    	mavenCentral()
    }
    
    dependencies {
    	implementation("org.springframework.boot:spring-boot-starter-web")
    	implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    	implementation("org.jetbrains.kotlin:kotlin-reflect")
    	implementation("org.springframework.boot:spring-boot-starter-security") //์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์˜์กด์„ฑ ์ฃผ์ž…!
    	testImplementation("org.springframework.boot:spring-boot-starter-test")
    }
    
    tasks.withType<KotlinCompile> {
    	kotlinOptions {
    		freeCompilerArgs += "-Xjsr305=strict"
    		jvmTarget = "11"
    	}
    }
    
    tasks.withType<Test> {
    	useJUnitPlatform()
    }

    dependencies ๋ถ€๋ถ„์— implementation("org.springframework.boot:spring-boot-starter-security") ๋ฅผ ์ถ”๊ฐ€ ํ›„ gradle๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    ๋งŒ๋“  ์  ์—†๋Š” ํ™”๋ฉด์ด ๋‚  ๋‹นํ™ฉํ•˜๊ฒŒ ํ•˜์ง€๋งŒ

     

    ๋กœ๊ทธ์ธ ํ™”๋ฉด์„ ๋งŒ๋“  ์ ์ด ์—†์ง€๋งŒ ๋‹นํ™ฉํ•˜์ง€ ๋งˆ์„ธ์š”. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๋กœ๊ทธ์ธํ™”๋ฉด๋„ ๊ธฐ๋ณธ์œผ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

    ์ด์ œ๋ถ€ํ„ฐ๋Š” ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ๋งŒ ์ž‘๊ณ  ๊ท€์—ฌ์šด "home" ํ…์ŠคํŠธ๋ฅผ ๋งŒ๋‚  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

     

    ํ•˜์ง€๋งŒ ๊ณ„์ •๊ณผ ํŒจ์Šค์›Œ๋“œ ๋˜ํ•œ ๋งŒ๋“ ์ ์ด ์—†์ง€๋งŒ ๋‹นํ™ฉํ•˜์ง€ ๋งˆ์„ธ์š”. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ฃผ๋Š” ๊ณ„์ •์ด ์žˆ๋‹ต๋‹ˆ๋‹ค.

    ์•„์ด๋””๋Š” "user", ํŒจ์Šค์›Œ๋“œ๋Š” ๋žœ๋ค ํ•˜๊ฒŒ ์ง€์ •๋˜๋Š”๋ฐ ์ฝ˜์†”์ฐฝ์„ ํ™•์ธํ•˜๋ฉด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ์ค‘๊ฐ„์— ์žˆ๋Š” Using generated security password ๊ฐ€ ํŒจ์Šค์›Œ๋“œ

     

    ์ด ์ •๋ณด๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด ์ž‘๊ณ  ๊ท€์—ฌ์šด home ํ…์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ๋งŒ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

     

     

    ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ

    ์„œ๋ฒ„๊ฐ€ ๊ธฐ๋™ ๋˜๋ฉด ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์˜ ์ดˆ๊ธฐํ™” ์ž‘์—… ๋ฐ ๋ณด์•ˆ ์„ค์ •์ด ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ,  ๋ณ„๋„์˜ ์„ค์ •์ด๋‚˜ ๊ตฌํ˜„์„ ํ•˜์ง€ ์•Š์•„๋„ ๊ธฐ๋ณธ์ ์ธ ์›น ๋ณด์•ˆ ๊ธฐ๋Šฅ์ด ํ˜„์žฌ ์‹œ์Šคํ…œ์— ์—ฐ๋™๋˜์–ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

    • ๋ชจ๋“  ์š”์ฒญ์€ ์ธ์ฆ์ด ๋˜์–ด์•ผ ์ž์›์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ
    • ์ธ์ฆ ๋ฐฉ์‹์€ ํผ ๋กœ๊ทธ์ธ ๋ฐฉ์‹๊ณผ httpBasic๋กœ๊ทธ์ธ ๋ฐฉ์‹์„ ์ œ๊ณต
    • ๊ธฐ๋ณธ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์ œ๊ณต
    • ๊ธฐ๋ณธ ๊ณ„์ • ํ•œ ๊ฐœ ์ œ๊ณต (user / ๋žœ๋ค ๋ฌธ์ž์—ด)

     

    ํ•˜์ง€๋งŒ ๊ณ„์ •์ด ํ•œ ๊ฐœ๋งŒ ์ œ๊ณต๋˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๊ณ„์ •๊ณผ ๊ถŒํ•œ ๋„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋ณด์•ˆ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ์„ธ๋ถ€์ ์ด๊ณ  ์ถ”๊ฐ€์ ์ธ ๋ณด์•ˆ๊ธฐ๋Šฅ์ด ๋” ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

     

Designed by Tistory.