๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Study/Java

[TIL] Spring Security

by hong- 2022. 7. 24.

๐Ÿ™Œ๐Ÿป Spring Security

 - Spring Framework ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์ฆ๊ณผ ์ธ๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ํ”„๋ ˆ์ž„์›Œํฌ

 - ์Šคํ”„๋ง ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณด์•ˆ์„ ์œ„ํ•œ ํ‘œ์ค€

 

 โ‘  ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ์ธ์ฆ์„ ์š”๊ตฌํ•จ

 โ‘ก ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋ฐ ์•”ํ˜ธ๋ฅผ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ ์–‘์‹ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ์ฆํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉ

 โ‘ข ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์•„์›ƒ์„ ํ—ˆ์šฉ

 โ‘ฃ CSRF ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€

 โ‘ข ์„ธ์…˜ ๊ณ ์ • ๊ณต๊ฒฉ : Session Fixsation์„ ๋ณดํ˜ธ

  - Session Fixsation? ๊ณต๊ฒฉ์ž๊ฐ€ ์ž์‹ ์˜ ์„ธ์…˜ id๋ฅผ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์คŒ์œผ๋กœ์จ ๊ณต๊ฒฉํ•˜๋Š” ๋ฐฉ๋ฒ•

โ‘ฅ ๋ณด์•ˆ ํ—ค๋” ํ†ตํ•ฉ

  -  HSTS ๊ฐ•ํ™”

  - X-Content-TypeOptions

  -  ์บ์‹œ ์ปจํŠธ๋กค๋Ÿฌ : ์ •์  ๋ฆฌ์†Œ์Šค ์บ์‹ฑ

  - X-XSS-Protection XSS ๋ณด์•ˆ (์Šคํฌ๋žฉํŠธ ๊ณต๊ฒฉ ๋ณด์•ˆ)

  - ํด๋ฆญ์žฌํ‚น์„ ๋ฐฉ์ง€ํ•˜๋Š” X-Frame ์˜ต์…˜ ํ†ตํ•ฉ

   → ํด๋ฆญ ์žฌํ‚น?

       - ์›น ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์ด ํด๋ฆญํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ธ์ง€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์–ด๋–ค ๊ฒƒ์„ ํด๋ฆญํ•˜๊ฒŒ ์†์ด๋Š” ์•…์˜์ ์ธ ๊ธฐ๋ฒ•

       - ๊ณต๊ฒฉ์ž๋Š” ๋น„๋ฐ€ ์ •๋ณด๋ฅผ ์œ ์ถœ์‹œํ‚ค๊ฑฐ๋‚˜ ๊ทธ๋“ค์˜ ์ปดํ“จํ„ฐ์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ

โ‘ฆ Servlet API ์ œ๊ณต


๐Ÿ’ก์ฃผ์ฒด Principal

  - ์œ ์ €, ๊ธฐ๊ธฐ, ์‹œ์Šคํ…œ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณดํ†ต ์œ ์ €, ์‚ฌ์šฉ์ž๋ฅผ ์˜๋ฏธ

๐Ÿ’ก์ธ์ฆ : Authentication

 - ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ

 - ์ฃผ์ฒด์˜ ์‹ ์›์„ ์ฆ๋ช…ํ•˜๋Š” ๊ณผ์ •

    - ์ฃผ์ฒด๋Š” ์ž์‹ ์„ ์ธ์ฆํ•ด๋‹ฌ๋ผ๊ณ  ์‹ ์› ์ฆ๋ช… ์ •๋ณด ์ œ์‹œ

    - ์ฃผ์ฒด๊ฐ€ ์œ ์ €์ผ ๊ฒฝ์šฐ ์‹ ์› ์ฆ๋ช… ์ •๋ณด๋Š” ํŒจ์Šค์›Œ๋“œ

๐Ÿ’ก์ธ๊ฐ€  =  ๊ถŒํ•œ ๋ถ€์—ฌ : Authorization 

  - ์ธ์ฆ์„ ๋งˆ์นœ ์œ ์ €์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ๊ฐ€ํ•˜๋Š” ๊ณผ์ •

  - ์ธ๊ฐ€๋Š” ๋ฐ˜๋“œ์‹œ ์ธ์ฆ ๊ณผ์ • ์ดํ›„ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋ฉฐ ๊ถŒํ•œ์€ ๋กค ํ˜•ํƒœ๋กœ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 

๐Ÿ’ก์ ‘๊ทผ ํ†ต์ œ : Access Control

  - ์–ด๋–ค ์œ ์ €๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋„๋ก ํ—ˆ๋ฝํ• ์ง€ ์ œ์–ดํ•˜๋Š” ํ–‰์œ„

  - ๋ฆฌ์†Œ์Šค์˜ ์ ‘๊ทผ ์†์„ฑ๊ณผ ์œ ์ €์—๊ฒŒ ๋ถ€์—ฌ๋œ๊ถŒํ•œ ๋˜๋Š” ๋‹ค๋ฅธ ์†์„ฑ๋“ค์„ ๊ฒฐ์ •


๐Ÿ“HttpSecurity ๊ฐ์ฒด 

 - ๋ช‡ ๊ฐ€์ง€ HTTP ๋ณด์•ˆ ๊ด€์ ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

 โ–ธ authorizeRequests( ) 

  - ์ด ํ˜ธ์ถœ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ์ฒด๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค์˜ ์š”์ฒญ ๋ณด์•ˆ ์ˆ˜์ค€ ์„ธ๋ถ€์ ์ธ ์„ค์ •

 โ–ธ antMatchers("๊ฒฝ๋กœ").authenticated( )

  - ์ง€์ •๋œ ๊ฒฝ๋กœ๋กœ ํ˜ธ์ถœ๋œ ์š”์ฒญ์€ ์ธ์ฆ์ด ๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธ

  - antMatchers๋Š” ๊ถŒํ•œ ๊ด€๋ฆฌ ๋Œ€์ƒ์„ ์ง€์ •ํ•จ

 โ–ธ antMatchers("๊ฒฝ๋กœ").access(String)

  - ์ฃผ์–ด์ง„ SpEL ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๊ฐ€ true ์ด๋ฉด ์ ‘๊ทผ ํ—ˆ์šฉ

  - SpEL์€ access( )๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ ‘๊ทผ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉ

  - hasRole()์€ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์—์„œ ์ง€์›๋˜๋Š” ๋ณด์•ˆ ํŠน์„ฑ ํ‘œํ˜„

 โ–ธ anyRequest( ).permitAll( )

  - ์ง€์ •ํ•œ ์š”์ฒญ๋“ค์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์š”์ฒญ๋“ค์€ ์ธ์ฆ์ด๋‚˜ ๊ถŒํ•œ ์—†์ด ํ—ˆ์šฉ


โ–ช๏ธ http.csrf( ).disable( )

- ์„œ๋ฒ„์— ์ธ์ฆ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๋ถˆํ•„์š”ํ•œ csrf ์ฝ”๋“œ๋“ค์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์Œ


โ–ช๏ธ http.headers( ).frameOptions( ).disable( )

- h2 Consle ํ™”๋ฉด์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Frame ์˜ต์…˜์„ disable ํ•จ


๐Ÿ“ WebMvcConfigurer์„ ์ƒ์†ํ•˜๋Š” ์ด์œ 

- @EnableWebMvc๊ฐ€ ์ž๋™์ ์œผ๋กœ ์„ธํŒ…ํ•ด์ฃผ๋Š” ์„ค์ •์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ์„ค์ • ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

 โ–ธ @EnableWebMvc

  - Spring MVC ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ํ•„์š”ํ•œ Bean ์„ค์ •๋“ค์„ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜


๐Ÿ“ PasswordEncoder ์ธํ„ฐํŽ˜์ด์Šค

- encode( )๋Š” ์‹ค์ œ๋กœ ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™”ํ•  ๋•Œ ์‚ฌ์šฉ

- matchers( )๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ๋ฐ›์€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋น„๊ตํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ


โ–ช๏ธ BCryptPasswordEncoding

- ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค

- BCrypt ํ•ด์‹ฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ธ์ฝ”๋”ฉํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ์™€

     ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ œ์ถœ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ €์žฅ์†Œ์— ์ €์žฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต

- ๋‹จ์ˆœํžˆ ํ•ด์‹œ๋ฅผ ํ•˜๋Š” ๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Salt๋ฅผ ๋„ฃ๋Š” ์ž‘์—…๊นŒ์ง€ ํ•˜๋ฏ€๋กœ

  ์ž…๋ ฅ ๊ฐ’์ด ๊ฐ™์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋งค๋ฒˆ ๋‹ค๋ฅธ encoded ๋œ ๊ฐ’์„ return ํ•ด์คŒ

- encode( ) ๋ฉ”์„œ๋“œ : ํŒจ์Šค์›Œ๋“œ๋ฅผ ์•”ํ˜ธํ™”ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ


โ–ช๏ธ DelegatingPasswordEncoding

- PassWordEncoder์„ ์—ฌ๋Ÿฌ ๊ฐœ ์„ ์–ธํ•œ ๋’ค ์ƒํ™ฉ์— ๋งž๊ฒŒ ๊ณจ๋ผ์“ธ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” Encoder

String idForEncode = "bcrypt";
Map encoders = new HashMap<>();
encoders.put(idForEncode, new BCyptPasswordEncoder());
encoders.put("noop", NoOpPasswordEncoder.getInstance());
encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());
encoders.put("scrypt", new SCyptPasswordEncoder());
encoders.put("sha256", new StandardPasswordEncoder());

PasswordEncoder passwordEncoder = new DelegatingPasswordEncoder(idForEncode, encoders);

  - ์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ•˜๋ฉด bcrypt, noop, pbkdf2, scrypt, sha256์ด encoders ์•ˆ์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋จ

  - ๋งˆ์ง€๋ง‰์— ์„ ์–ธํ–ˆ์„ ๋•Œ idForEncode๋ฅผ bcypt๋กœ ์ฃผ์—ˆ์œผ๋‹ˆ ์ตœ์ข…์œผ๋กœ encoding ๋˜๋Š” ๊ฐ’์€

     bcypt๋กœ ํ•ด์‹ฑ ๋œ ํŒจ์Šค์›Œ๋“œ๊ฐ€ ๋ฆฌํ„ด ๋˜๋ฉฐ ๋งจ ์•ž์— prefix๋กœ ์•”ํ˜ธํ™”ํ•œ ๋ฐฉ๋ฒ•์ด ๋ถ™์Œ

  * ์žฅ์  *

   - ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ˜„์žฌ ๊ถŒ์žฅํ•˜๋Š” ์ €์žฅ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•จ์„ ๋ณด์žฅํ•จ

   - ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ์€ ์ตœ์‹  ํ˜•์‹๊ณผ ๋ ˆ๊ฑฐ์‹œ ํ˜•์‹์„ ๋ชจ๋‘ ์ง€์›

   - ๋‚˜์ค‘์— ์ธ์ฝ”๋”ฉ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ


โ–ช๏ธ SCryptPasswordEncoder

- Scrypt ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ cpu์™€ memory์˜ cost ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Œ

  - Scrypt๋Š” ์‹ค์ œ๋กœ Salsa20์ด๋ผ๋Š” ํ•ด์‹ฑ ๋ฐฉ์‹ ์‚ฌ์šฉ


๐Ÿ™Œ๐Ÿป Filter์™€ FilterChain

 ๐Ÿ“ Filter Interface

  - FIlter ? HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ

  - ํ•„ํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” FilterConfig ๊ฐ์ฒด, FilterChain ๊ฐ์ฒด, Filter ๊ฐ์ฒด ํ•„์š”

  - FilterConfig์™€ FilterChain์„ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋“ค์€ ์›น์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ตฌํ˜„ํ•ด์คŒ

  - Filter ์ธํ„ฐํŽ˜์ด์Šค๋Š” init(), doFilter(), destory() ๋ฉ”์†Œ๋“œ ํ•„์š”

public class FirstFilter implements Filter {
	public void init(FilterConfig filterConfig) throws ServletException {
    	//ํ•„ํ„ฐ์˜ ์ดˆ๊ธฐํ™” ์ž‘์—…
    }
    
    public void doFilter(ServletRequest request,
    					 ServletResponse response,
                         FilterChain chain)
                         throws IOException, ServletException {
         //request ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์š”์ฒญ์˜ ํ•„ํ„ฐ ์ž‘์—… ์ˆ˜ํ–‰
         //์ฒด์ธ์˜ ๋‹ค์Œ ํ•„ํ„ฐ ์ฒ˜๋ฆฌ                         
       chain.doFilter(request, response);
         //response๋ฅผ ์ด์šฉํ•˜์—ฌ ์‘๋‹ต์˜ ํ•„ํ„ฐ๋ง ์ž‘์—… ์ˆ˜ํ–‰       	
    }
    
   public void destory() {
     //์ฃผ๋กœ ํ•„ํ„ฐ๊ฐ€ ์‚ฌ์šฉํ•œ ์ž์›์„ ๋ฐ˜๋‚ฉ
   }
 }

  โ‘  init(FilterConfig config)

   - ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„ํ„ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ

  โ‘ก doFilter(ServletRequest resquest ServletResponse response, FilterChain chain)

   - ํ•„ํ„ฐ์—์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋กœ์ง์„ ์ž‘์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ

  โ‘ข destory() : void

  - ํ•„ํ„ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๊ธฐ ์ „์— ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ


 ๐Ÿ“ FilterChain

   - ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•„ํ„ฐ๋“ค์ด ์‚ฌ์Šฌ์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋™์ž‘

   - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•ฑ์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์ปจํ…Œ์ด๋„ˆ๋Š” ์š”์ฒญ URI์˜ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์–ด๋–ค ํ•„ํ„ฐ์™€ ์„œ๋ธ”๋ฆฟ์„ ์ ์šฉํ• ์ง€ ๊ฒฐ์ •

   - ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์€ ๋‹จ์ผ ์š”์ฒญ ์ฒ˜๋ฆฌ

   - ํ•„ํ„ฐ๋Š” ์ฒด์ธ์„ ํ˜•์„ฑํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ์‹ค์ œ๋กœ ์š”์ฒญ ์ž์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ํ•„ํ„ฐ๊ฐ€ ๋‚˜๋จธ์ง€ ์ฒด์ธ ๊ฑฐ๋ถ€ ๊ฐ€๋Šฅ

   - ํ•„ํ„ฐ๋Š” ํ•„ํ„ฐ์ฒด์ธ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ํ•„ํ„ฐ๊ฐ€ ์—ฐ์‡„์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ

   - 1๊ฐœ์˜ ์„œ๋ธ”๋ฆฟ์ด HttpServletRequest์™€ HttpServletResponse ์ฒ˜๋ฆฌ ๋‹ด๋‹น


  โ–ช๏ธ Filter Chain ์ˆœ์„œ

   โ‘  @Order or Ordered ๊ตฌํ˜„

    - Filter ํƒ€์ž…์˜ @Beans์— @Order๋ฅผ ๋ถ™์ด๊ฑฐ๋‚˜ Orderd๋ฃฐ ๊ตฌํ˜„ํ•จ

   โ‘ก FilterRegistrationBean

   - API์˜ ์ผ๋ถ€๋กœ ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๋Š” FilterRegistrationBean์˜ ์ผ๋ถ€๊ฐ€ ๋จ


๐Ÿ’ก ์„œ๋ธ”๋ฆฟ : Servlet

 - ๋™์  ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ 

   = ์›น ์„œ๋ฒ„๋กœ ์›น ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•  ๋•Œ ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋„์™€์คŒ

 - ์›น ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ํ๋ฆ„์„ ๊ฐ„๋‹จํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋งŒ์œผ๋กœ ์ฒด๊ณ„์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

 - ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž…๋ ฅ๋˜๋Š” ์•„์ด๋””์™€ ๋น„๋ฒˆ์„ ํ™•์ธํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ตํ•ด์ฃผ๋Š” ์—ญํ•  ์ˆ˜ํ–‰

๐Ÿ’ก ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ : Servlet Filter

 - ์„œ๋ธ”๋ฆฟ์ด ํ˜ธ์ถœ๋˜๊ธฐ ์ „, ํ›„๋กœ ๊ณตํ†ต ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• 

 - ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ์„œ๋ธ”๋ฆฟ์ด ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœ๋œ ํ›„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๋กœ ๊ตฌํ˜„

 


 ๐Ÿ“ DelegatingFilterProxy

  - ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”์ฒญ์„ ๊ฐ์‹ธ๊ฒŒ ํ•ด์„œ ๋ชจ๋“  ์š”์ฒญ์— ๋ณด์•ˆ์ด ์ ์šฉ๋˜๊ฒŒ ํ•˜๋Š” ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ

  - DelegatingFilterProxy๋ผ๋Š” ํ•„ํ„ฐ๊ตฌํ˜„์ฒด๋กœ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐ

    → ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” Filter ๋“ฑ๋ก์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์Šคํ”„๋ง์ด ์ •์˜ํ•˜๋Š” Bean์„ ์ธ์‹ํ•˜์ง€๋Š”๋ชปํ•จ

  - ๋ชจ๋“  ์ฒ˜๋ฆฌ๋ฅผ Filter๋ฅผ ๊ตฌํ˜„ํ•œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์œ„์ž„ํ•ด์คŒ

  - ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๋กœ Spring IOC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” Filter Bean์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ


 ๐Ÿ“ FilterChainProxy

  - SecurityFilterChain์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ Filter ์ธ์Šคํ„ด์Šค๋กœ ์œ„์ž„ ๊ฐ€๋Šฅ

  - FilterChainProxys๋Š” ๋นˆ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต DelegatingFilterProxy๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์Œ


โ‘  FilterChain์—์„œ ์—ฌ๋Ÿฌ Filter๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ

โ‘ก Filter ์‹คํ–‰ ์ค‘ Delegating FilterProxy๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ

  - DelegatingFilterProxy ๋‚ด๋ถ€์— ์žˆ๋Š” Bean Filter๋Š” FilterChainProxy๊ฐ€ ๋จ

โ‘ข SecurityFilterChain์€ FilterChainProxy๋กœ ๋“ฑ๋ก๋จ

โ‘ฃ ์—ฌ๋Ÿฌ ๊ฐœ์˜ SecurityFilterChain์ด ์žˆ์„ ๋•Œ ์–ด๋–ค ๊ฒƒ์„์‚ฌ์šฉํ• ์ง€๋Š” FilterChainProxy๊ฐ€ ๊ฒฐ์ •

  - ๊ฐ€์žฅ ๋จผ์ € ๋งค์นญํ•œ SecurityFilterChain์„ ์‹คํ–‰

'Study > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] Filter vs Interceptor  (0) 2022.07.25
[TIL] Spring Security ์ธ์ฆ  (0) 2022.07.25
[TIL] API ๋ฌธ์„œํ™”  (0) 2022.07.21
[TIL] ์ธ์ฆ/๋ณด์•ˆ  (0) 2022.07.21
[TIL] ์Šฌ๋ผ์ด์Šค ํ…Œ์ŠคํŠธ  (0) 2022.07.14