Spring

[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ๊ถŒํ•œ์„ค์ •๊ณผ ํ‘œํ˜„์‹

2023. 11. 9. 12:44
๋ชฉ์ฐจ
  1. ์„ ์–ธ์  ๋ฐฉ์‹
  2. ๋™์  ๋ฐฉ์‹ - DB ์—ฐ๋™ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹
  3. ์ธ๊ฐ€ API

 

๊ถŒํ•œ ์„ค์ • ๋ฐฉ์‹์—๋Š” ์„ ์–ธ์  ๋ฐฉ์‹๊ณผ ๋™์  ๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค.

 

์„ ์–ธ์  ๋ฐฉ์‹

  • URL
    • http.antMatcher("/user/**).hasRole("USER")
  • Method
    • @PreAuthorize("hasRole('USER')")
      public void user() {System.out.println("user")}

 

๋™์  ๋ฐฉ์‹ - DB ์—ฐ๋™ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹

  • URL
  • Method

 

SecurityConfig

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .antMatcher(โ€œ/shop/**โ€)
        .authorizeRequests()
        .antMatchers(โ€œ/shop/loginโ€, โ€œ/shop/users/**โ€).permitAll()
			  .antMatchers(โ€œ/shop/mypageโ€).hasRole(โ€œUSERโ€)
        .antMatchers("/shop/admin/pay").access("hasRole('ADMIN')");
				.antMatchers("/shop/admin/**").access("hasRole('ADMIN') or hasRole(โ€˜SYS ')");
        .anyRequest().authenticated()
       }

 

  • ** : ๋ชจ๋“  ํ•˜์œ„ ๊ฒฝ๋กœ

โš ๏ธ์„ค์ • ์‹œ ๊ตฌ์ฒด์ ์ธ ๊ฒฝ๋กœ๊ฐ€ ๋จผ์ € ์˜ค๊ณ  ๊ทธ๊ฒƒ๋ณด๋‹ค ํฐ ๋ฒ”์œ„์˜ ๊ฒฝ๋กœ๊ฐ€ ๋’ค์— ์˜ค๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

        .antMatchers("/shop/admin/pay").access("hasRole('ADMIN')");
	.antMatchers("/shop/admin/**").access("hasRole('ADMIN') or hasRole(โ€˜SYS ')");

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ์œ„์—์„œ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ์ธ๊ฐ€์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š”๋ฐ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ์œ„์˜ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

์•„๋ž˜์ชฝ์ด ๋จผ์ € ์ž‘์„ฑํ•˜๋ฉด SYS๊ถŒํ•œ์„ ๊ฐ€์ง„ ์—ญํ• ์ด /shop/admin/pay์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

์ธ๊ฐ€ API

  • anonymous๋Š” ์ต๋ช… ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— USER๋กœ ์ง€์ •๋œ ์‚ฌ์šฉ์ž๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด permitAll() ์„ค์ •์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ์ž ์ƒ์„ฑ

 

SecurityConfig

@Bean
public static UserDetailsManager users() {

    UserDetails user = User.builder()
            .username("user")
            .password("{noop}1111")
            .roles("USER")
            .build();

    UserDetails sys = User.builder()
            .username("sys")
            .password("{noop}1111")
            .roles("SYS")
            .build();

    UserDetails admin = User.builder()
            .username("admin")
            .password("{noop}1111")
            .roles("ADMIN", "SYS", "USER")
            .build();

    return new InMemoryUserDetailsManager( user, sys, admin );
}

@Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        http
                .authorizeHttpRequests()
                .antMatchers("/user").hasRole("USER")
                .antMatchers("/admin/pay").hasRole("ADMIN")
                .antMatchers("/amin/**").hasRole("hasRole('ADMIN') or hasRole('SYS')")
                .anyRequest().authenticated();

        return http.build();
    }
  • USER๋Š” /user์—๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • SYS๊ถŒํ•œ์€ admin์€ ๊ฐ€๋Šฅํ•˜๊ณ  admin/pay๋Š” ๋ถˆ๊ฐ€๋Šฅํ•จ
  • ADMIN๊ถŒํ•œ์€ /admin ๋ชจ๋‘ ๊ฐ€๋Šฅ

 

์‹ค์ œ ์šด์˜ ๋ฐฉ์‹์€ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ง๊ณ  ๋™์ ์œผ๋กœ DB๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋จ. ๋ฉ”๋ชจ๋ฆฌ ๋ฐฉ์‹์€ ๊ทธ๋ƒฅ ํ…Œ์ŠคํŠธ ์šฉ๋„๋กœ๋งŒ!

 


 

ํ•ด๋‹น ๊ธ€์€ ์ธํ”„๋Ÿฐ์˜ ์Šคํ”„๋ง์‹œํ๋ฆฌํ‹ฐ-Spring Boot ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” Spring Security๋ฅผ ๋ณด๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

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

[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) CSRF, CsrfFilter - ๋กœ๊ทธ์•„์›ƒ ์˜ˆ์ œ  (2) 2023.11.20
[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ExceptionTraslationFilter, RequestCacheAwareFilter  (0) 2023.11.15
[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ๋™์‹œ ์„ธ์…˜ ์ œ์–ด, ์„ธ์…˜ ๊ณ ์ • ๋ณดํ˜ธ, ์„ธ์…˜ ์ •์ฑ…  (0) 2023.11.06
[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ์ต๋ช…์‚ฌ์šฉ์ž ์ธ์ฆ : AnonymousAuthenticationFilter  (0) 2023.11.04
[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) Remember-Me ์ธ์ฆ  (0) 2023.11.03
  1. ์„ ์–ธ์  ๋ฐฉ์‹
  2. ๋™์  ๋ฐฉ์‹ - DB ์—ฐ๋™ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹
  3. ์ธ๊ฐ€ API
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) CSRF, CsrfFilter - ๋กœ๊ทธ์•„์›ƒ ์˜ˆ์ œ
  • [Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ExceptionTraslationFilter, RequestCacheAwareFilter
  • [Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ๋™์‹œ ์„ธ์…˜ ์ œ์–ด, ์„ธ์…˜ ๊ณ ์ • ๋ณดํ˜ธ, ์„ธ์…˜ ์ •์ฑ…
  • [Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ์ต๋ช…์‚ฌ์šฉ์ž ์ธ์ฆ : AnonymousAuthenticationFilter
DAHLIA CHOI
DAHLIA CHOI
DAHLIA CHOI
๐ŸŒผ dali's log ๐ŸŒผ
DAHLIA CHOI
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (103)
    • Spring (42)
    • JAVA & OOP (8)
    • AWS (2)
    • DevOps (5)
    • Network (7)
    • DB (5)
    • Algorithm (9)
      • BOJ (6)
      • PROGRAMMERS (2)
      • LEETCODE (0)
    • Books (5)
    • ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… (5)
    • ํšŒ๊ณ  (0)
    • ๊ธฐํƒ€ (5)
    • FRENCH (1)
    • ํ•„์‚ฌ (2)
    • ๊ฒฝํ—˜ (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
DAHLIA CHOI
[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ๊ถŒํ•œ์„ค์ •๊ณผ ํ‘œํ˜„์‹
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.