Spring

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

DAHLIA CHOI 2023. 11. 9. 12:44

 

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

 

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

  • 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๋ฅผ ๋ณด๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.