스프링/스프링 시큐리티
스프링 필터 - 권한 있는 사람만 접근
chanhee01
2024. 1. 8. 17:31
프로젝트에서 로그인 기능을 만들 때 스프링 시큐리티에 대한 깊이 이해가 없었기 때문에 스프링 시큐리티에 대한 공부와 강의 코드를 정리를 할 것이다.
나머지 코드들은 아래의 링크에서 확인이 가능하다.
깃허브 : chanhee01/spring-security (github.com)
@Configuration
@EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록이 된다.
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf(CsrfConfigurer::disable);
http.authorizeHttpRequests(authorize ->
authorize
.requestMatchers("/user/**").authenticated()
.requestMatchers("/manager/**").hasAnyRole("ADMIN", "MANAGER")
.requestMatchers("/admin/**").hasAnyRole("ADMIN")
.anyRequest().permitAll()
);
http.formLogin(formLogin -> formLogin
.loginPage("/loginForm"));
return http.build();
}
}
config 패키지에 있는 SecurityConfig 파일을 만들어준다.
스프링 빈으로 등록된 SecurityFilterChain은 특정 사용자만 입력할 수 있도록 해주는 Configuration이다.
authrozie를 통해서 /user로 시작하는 path는 모두가 접근할 수 있고, /manager, /admin으로 시작하는 path는 각각 ADMIN, MANGER와 ADMIN이라는 Role을 가진 사용자만 접근할 수 있다.
http.formLogin은 권한이 없는 사용자가 접근을 하면 /loginForm 페이지로 다시 보내는 것이다.
anyRequest.permitAll()은 나머지 path는 모두 접근할 수 있다는 것이다.
localhost:8080은 스프링 필터체인에 걸리지 않기 때문에 로그인을 안해도 들어갈 수 있다.
localhost:8080/user로 접근하면 로그인을 안했기 때문에 403 에러가 발생한다.
admin과 manager의 경로로 접근한다고 할 때에도 위와 같은 403 에러가 발생한다.