‡๐Ÿ‘ฉ‍๐Ÿ’ป ‡/ºSpring

[Spring Security] Spring Security ์ดˆ๊ธฐ ์„ค์ •

Trudy | ์†ก์—ฐ 2023. 12. 21. 12:50

๐Ÿ“Spring Security๋ž€?

 

ํ•„ํ„ฐ๋ง์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์Šคํ”„๋ง ๊ธฐ๋ฐ˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ(์ธ์ฆ๊ณผ ๊ถŒํ•œ)์„ ๋‹ด๋‹นํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
๋งŒ์•ฝ ์Šคํ”„๋ง์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ์ž์ฒด์ ์œผ๋กœ ์„ธ์…˜์„ ์ฒดํฌํ•˜๊ณ  redirect ๋“ฑ์„ ๋‹ค์–‘ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•˜์ง€๋งŒ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ๋ณด์•ˆ๊ณผ ๊ด€๋ จํ•ด์„œ ์ฒด๊ณ„์ ์œผ๋กœ ๋งŽ์€ ์˜ต์…˜๋“ค์„ ์ง€์›ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•œ ์ฝ”๋”ฉ๋งŒ์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.


๐Ÿ“Spring Security ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

1. ๊ธฐ์กด Spring boot  ํ”„๋กœ์ ํŠธ์— Spring security ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

 

 pom.xml

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
//...
//Spring security ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
        
//..

 

2. ์‹œํ๋ฆฌํ‹ฐ ๊ด€๋ จ๋œ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ • 

 

application.yml

logging:
  level:
    org.springframework.security: DEBUG

 

Security ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ pom.xml์— ์ถ”๊ฐ€ํ•˜๊ณ  localhost:8080์œผ๋กœ ์ ‘์†ํ•˜๋ฉด  localhost:8080/login์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋˜๊ณ  ๋ฐ‘ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๊ฐ€ ๋œฌ๋‹ค.
๊ทธ ๋ง์€ ์ฆ‰์Šจ Security ์•ˆ์— View, Controller ๋“ฑ ์–ด๋А ์ •๋„์˜ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ๊ฒ ๋‹ค!


๐Ÿ“์‚ฌ์šฉ ์˜ˆ์‹œ

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig  {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http){
        try {
            http.csrf().disable()
                    .authorizeRequests()
                    .antMatchers().permitAll()
                    .anyRequest().denyAll();


            return http.build();
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

}

 

csrf().disable : ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐ›์•„์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ทธ ๊ธฐ๋Šฅ์„ ๋”

antMatchers(~).permitAll()  : ~ ๋ถ€๋ถ„์„ ํ—ˆ์šฉ

.anyRequest().denyAll()  : ๋ชจ๋“  ์š”์ฒญ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ

 

Filter์—์„œ ๊ฑฐ๋ถ€๊ฐ€ ๋˜๋ฉด, Dispatcher๊นŒ์ง€ ๊ฐ€์ง€๋„ ์•Š๊ณ  ๋ฐ”๋กœ Filter์—์„œ ๋ฐ˜ํ™˜๋œ๋‹ค. 

์œ„ ์ฝ”๋“œ๋Š” ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•˜์—ฌ denyํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, Filter์—์„œ ๋ฐ˜ํ™˜๋˜์–ด ๋ฐ‘ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์•ก์„ธ์Šค ๊ฑฐ๋ถ€ ์—๋Ÿฌ๊ฐ€ ๋œจ๊ฒŒ ๋œ๋‹ค.