๊ถํ ์ค์ ๋ฐฉ์์๋ ์ ์ธ์ ๋ฐฉ์๊ณผ ๋์ ๋ฐฉ์์ด ์กด์ฌํ๋ค.
์ ์ธ์ ๋ฐฉ์
- URL
- http.antMatcher("/user/**).hasRole("USER")
- Method
- @PreAuthorize("hasRole('USER')")
public void user() {System.out.println("user")}
- @PreAuthorize("hasRole('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๋ฅผ ๋ณด๊ณ ์์ฑํ ๊ธ์ ๋๋ค.