2016-08-20 24 views
0

AbstractAuthenticationProcessingFilter을 확장하는 필터가 있습니다. 내가 아래에있는 보안 설정 클래스에서필터가 Spring 부트 프로젝트에서 두 번 호출됩니다.

@Override 
    protected void configure(final HttpSecurity http) throws Exception { 
     http.addFilterBefore(getMyFilter(), BasicAuthenticationFilter.class); 
     http.addFilterAfter(getMyFilter2(), MyFilter.class); 
     http.csrf().disable().authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll(); 
    } 

    private MyFilter getMyFilter() { 
     return new MyFilter(properties, apiConsumer); 
    } 

나는 우체부과 REST 엔드 포인트를 호출

MyFilter GET의 doFilter 방법은 두 번 안타. 두 번 모두 ServletRequestrequestedSessionIdstrippedServletPath이 있습니다.

그러나 MyFilter2GenericFilterBean으로 확장되며 한 번만 호출됩니다.

필터의 실행 순서는 MyFilter.doFilter입니다 ->MyFilter2.doFilter ->MyFilter.doFilter

어떤 이유가 될 것이며, 어떻게 근본 원인을 찾을 수 있습니까?

+1

. 해당 주석을 제거하면 한 번만 조회됩니다. – Harshana

답변

0

이 동작은 기본 인증 팝업 창이 나타나는 첫 번째 요청에서만 나타납니다. 그렇다면 기본 인증 사양 및 스프링의 BasicAuthenticationFilter 구현 때문입니다.

처음으로 서비스를 호출하면 Spring은 요청시 Authorization 헤더를 찾고,없는 경우 브라우저에 WWW-Authenticate: Basic 헤더와 함께 응답을 보냅니다. 브라우저가 특정 헤더로이 응답을 수신하면 인증 팝업이 표시됩니다. 사용자와 암호를 입력 할 때 브라우저가 다른 요청 (지금은 Authorization 헤더를 사용)을 요청하면 Spring은 요청을 올바르게 승인 할 수 있습니다.

문제는 전체 프로세스에서 Spring이 필터 요청을 두 번 처리하고 있다는 것입니다.

현재 기본 인증에 대한 자세한 내용을보실 수 있습니다 : 나는 @Component 주석과 MyFilter을 정의했다 https://en.wikipedia.org/wiki/Basic_access_authentication

+1

감사하지만 요청을 보내기 위해 우편 배달부를 사용하고 있습니다. 나는 그러한 인증 팝업을 얻지 못한다. – Harshana

+0

우편함을 사용하고 있고 기본 인증 (Basic Auth) 인증을 사용하는 경우 동일한 방식으로 작동합니다 (우체부 관리자가이 다단계 인증 프로세스 자체를 처리합니다) –

+0

아니오 인증을 선택합니다 – Harshana

관련 문제