728x90
의문
build.gradle에 Spring Security를 추가하게 되면 로그인 화면으로 넘어가는 것을 볼 수 있다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
}
그렇다면 왜 로그인 화면으로 넘어가게 되는 걸까?
원인을 찾아라
우리는 로그인 화면으로 넘어가지 않도록 SpringConfig라는 것을 만들고, SeuciryFilterChain를 재정의하며 permitAll() 메서드를 사용해서 로그인 창이 뜨지 않고 원하는 페이지에 접속할 수 있도록 설정하고 있다.
그래서 SecurityFilterChain에 대해 알아보기로 했다.
SecurityFilterChain
public interface SecurityFilterChain {
boolean matches(HttpServletRequest request);
List<Filter> getFilters();
}
SecurityFilterChain은 Interface로 이루어져 있었다.
그렇다면 우리가 SecurityFilterChain을 재정의 하지 않을 경우 어디로 타고 들어가게 되는 걸까?
Navigate to the Spring bean declaration을 눌러 SecurityFilterChain이 Bean으로 등록되어 있는 곳으로 이동했다.
SpringBootWebSecurityConfiguration.java 파일을 보면 SecurityFilterChain을 정의하고 있었다.
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
class SpringBootWebSecurityConfiguration {
/**
* The default configuration for web security. It relies on Spring Security's
* content-negotiation strategy to determine what sort of authentication to use. If
* the user specifies their own {@code WebSecurityConfigurerAdapter} or
* {@link SecurityFilterChain} bean, this will back-off completely and the users
* should specify all the bits that they want to configure as part of the custom
* security configuration.
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnDefaultWebSecurity
static class SecurityFilterChainConfiguration {
@Bean
@Order(SecurityProperties.BASIC_AUTH_ORDER)
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
http.formLogin();
http.httpBasic();
return http.build();
}
}
...
}
모든 요청에 대해서 인증(authenticated)이 필요하다고 설정되어 있으며, http.formLogin()을 통해 로그인을 진행하도록 만들어져 있었다. formLogin() 안에는 loginPage가 존재하지 않다면 기본적으로 생성해 주는 기능을 포함하고 있다.
이러한 이유로, Config를 커스텀하지 않은 경우에는 스프링을 RUN 하였을 때 로그인 화면이 뜨는 것이었다.
반응형
'Server > Spring&Spring Boot' 카테고리의 다른 글
[Spring] @Builder 사용시, 초기화해야할 필드가 존재할 때 발생하는 에러. @Builder will ignore the initializing expression entirely (0) | 2023.03.25 |
---|---|
[Docs] Spring Rest Docs HTML 출력하는 법. (0) | 2023.03.22 |
[Spring colud] open feign 사용법 (0) | 2023.02.25 |
[Thymeleaf] th:object, th:field 사용법 (0) | 2023.02.21 |
[Thymeleaf] th:value와 th:field를 함께 쓰면 value는 무시된다. (0) | 2023.02.10 |