02.Security Config 클래스
Security 버전별 구현
스프링 부트 2.x.x ~ 2.6.x (시큐리티 5.x.x ~ 2.6.x)
1
2
3
4
5
6
7
8
9
10
11
12
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").authenticated()
.anyRequest().permitAll();
}
}
- WebSecurityConfigurerAdapter 클래스를 상속받아 구현
스프링 부트 2.7.x ~ 3.0.x (시큐리티 5.7.x M2 ~ 3.0.x)
1
2
3
4
5
6
7
8
9
10
11
12
13
public class SpringSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests()
.requestMatchers("/admin").hasRole("ADMIN")
.anyRequest().authenticated();
return http.build();
}
}
- 상속 없이 빈으로 등록하여 구현
스프링 부트 3.1.x ~ (시큐리티 6.1.x ~)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class SpringSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((auth) -> auth
.requestMatchers("/login", "/join").permitAll()
.anyRequest().authenticated()
);
return http.build();
}
}
- 이전 버전에서 빌드 방식으로 설정하던 것들이 람다식 설정으로 바뀜
Security Config
- 인가 설정을 진행하는 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http
.authorizeHttpRequests((auth) -> auth
.requestMatchers("/", "/login").permitAll()
.requestMatchers("/admin").hasRole("ADMIN")
.requestMatchers("/my/**").hasAnyRole("ADMIN", "USER")
.anyRequest().authenticated()
);
return http.build();
}
}
- permitAll() : 모두 접근 가능
- hasRole() : 특정 역할을 가진 사용자만 접근 가능
- hasAnyRole() : 역할 등록을 여러개 가능
- anyRequest() : 위에서 설정한 경로를 제외한 나머지 경로
- authenticated() : 로그인(인증)이 되었으면 접근 가능
- 코드 작성시 위에서부터 권한을 설정하므로 순서를 잘 지켜야 한다.
- 만약 anyRequest().authenticated() 를 먼저 작성해 버리면 밑의 경로들은 무시된다.