• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

CustomAuthenticationSuccessHandler에서 궁금점

21.06.19 21:24 작성 조회수 179

0

1.onAuthenticationSuceess를 오버라이딩 하면서

setDefaultTargetUrl("/")로 설정했는데요

이렇게 되면SecurityConfig파일에서

defaultSuccessUrl("/")를 생략해도 되나요?

2.아래 다른분이 SuccessHandler가 동작하지 않으면

defaultSuccessURl위치를 successHandler위쪽으로 올리라고 하셔서 그대로 수정하니 동작했습니다.

이때 defaultSuccesURl의 설정 위치가 successHandler의
커스터마이징한 SuccessHandler의 동작에 영향을 주는지 
궁금합니다. 

답변 1

답변을 작성해보세요.

3

1.onAuthenticationSuceess를 오버라이딩 하면서

setDefaultTargetUrl("/")로 설정했는데요

이렇게 되면SecurityConfig파일에서

defaultSuccessUrl("/")를 생략해도 되나요?

네 생략해도 됩니다. 

SuccessHandler 와 defaultSuccessUrl 모두 다 설정을 할 경우에 그 중에서 하나만 적용됩니다.

이와 관련해서 아래 질문에 연결해서 답변을 하도록 하겠습니다 .

2.아래 다른분이 SuccessHandler가 동작하지 않으면

defaultSuccessURl위치를 successHandler위쪽으로 올리라고 하셔서 그대로 수정하니 동작했습니다.

이때 defaultSuccesURl의 설정 위치가 successHandler의 커스터마이징한 SuccessHandler의 동작에 영향을 주는지 궁금합니다. 

말씀하신 것처럼 API 설정 위치에 따라 적용되는 결과가 달라집니다.

successHandler() 와 defaultSuccessURl() 를 설정하게 되면 스프링 시큐리티가 초기화 되면서 FormLoginConfigurer 의 부모클래스인  AbstractAuthenticationFilterConfigurer 의 successHandler 속성에 저장이 되고 다시 UsernamePasswordAuthenticationFilter 의 successHandler 속성에  반영이 됩니다.

로그인에 성공을 하게 되면 UsernamePasswordAuthenticationFilter 에 저장된 successHandler 가 호출이 되는 구조입니다.

그렇기 때문에 API 설정이 아래에 위치할 수록 위에 위치한 설정을 덮어쓰게 되어서 그런 결과가 나타나게 됩니다.