본문 바로가기

Backend Development/Spring boot

[Spring boot] authenticationEntryPoint /auth

인증을 위한 Entry point는 보통 아래와 같이 security config이 configure 메소드에서 설정을 한다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .csrf()
    .disable();

    http
    .httpBasic()
    .authenticationEntryPoint(samlEntryPoint);

 

.httpBasic() 은 아래와 같이 미리정의된 HttpBasicConfigurer 을 실행해준다.

/**
 * Creates a new instance
 * @see HttpSecurity#httpBasic()
 */
public HttpBasicConfigurer() {
   realmName(DEFAULT_REALM);
   LinkedHashMap<RequestMatcher, AuthenticationEntryPoint> entryPoints = new LinkedHashMap<>();
   entryPoints.put(X_REQUESTED_WITH, new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED));
   DelegatingAuthenticationEntryPoint defaultEntryPoint = new DelegatingAuthenticationEntryPoint(entryPoints);
   defaultEntryPoint.setDefaultEntryPoint(this.basicAuthEntryPoint);
   this.authenticationEntryPoint = defaultEntryPoint;
}

 

단 주의할 것은 위 httpBasic을 사용시 기본 authentication entry point는 /auth이라는 것이다.

 

아래와 같이 /saml/login url에 대해서 entrypoint 를 필터로 걸었다면 authentication entry 포인트는 httpBasic /auth와 /saml/login 두개가 된다.

@Bean
public FilterChainProxy samlFilter() throws Exception {
...
    chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/login/**"),
        samlEntryPoint));
...
    return new FilterChainProxy(chains);
}

 

이것을 모르고 /auth에서 인증이 왜 시작 되는지 한참을 찾고 말았다. ㅠㅠ