스프링 시큐리티 Config 클래스를 생성하여 인가 작업을 설정한 후에는 특정 경로에 대해 접근 했을 때 권한이 없는경우 자동으로 로그인 페이지로 리다이렉션 되지 않고 오류가 발생한다.
Config 클래스를 설정하면 로그인 페이지 설정 또한 작업해주어야 한다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http
.authorizeHttpRequests((auth) -> auth
.requestMatchers("/", "/login", "/loginProc").permitAll()
.requestMatchers("/admin").hasRole("ADMIN")
.requestMatchers("/my/**").hasAnyRole("ADMIN", "USER")
.anyRequest().authenticated()
);
//새로 추가된 코드
http
.formLogin((auth) -> auth.loginPage("/login") // -- 1
.loginProcessingUrl("/loginProc") // -- 2
.permitAll() // -- 3
);
http
.csrf((auth) -> auth.disable()); // -- 4
return http.build();
}
}
loginPage("/주소")
: 로그인 페이지가 어디있는지 주소 설정(로그인 권한이 없을 때 자동으로 해당 로그인 페이지로 시큐리티가 리다이렉션 해준다)loginProcessingUrl("/주소")
: 로그인한 정보가 해당 주소로 넘겨지면 받아서 로그인 처리를 진행한다.permitAll()
: 해당 경로를 모든 접근에 대해 허용csrf
: 시큐리티의 위변조 방지 설정(Post 요청시 csrf Token도 보내주어야 로그인 진행된다.) → 개발 환경에서 비활성화 시키기 용스프링부트 어플리케이션을 실행하면 자동으로 생성된 시큐리티 패스워드(security password) 값을 사용하여 로그인 가능하다.
Id : user
Password : 자동 생성된 값