답변 6
6
확인해 보니 제네릭 부분이 조금 문제가 있었습니다.
보시면
1. defaultSuccessUrl("/") 는 FormLoginConfigurer<HttpSecurity> 가 리턴되고 있고
2. authenticationDetailsSources(authenticationDetailsSource) 는 FormLoginConfigurer 가 리턴되고 있습니다.
이둘의 차이는 api 가 실행되고 나서 리턴되는 객체가 HttpSecurity 타입으로 되어야 하는데 2번은 제네릭이 적용되지 않아서 최상위 인터페이스인 SecurityBuilder 타입의 객체가 리턴되고 있습니다.
일단
@Autowired
private AuthenticationDetailsSource authenticationDetailsSource;
으로 선언되어 있는 부분을
@Autowired
private FormAuthenticationDetailsSource authenticationDetailsSource;
으로 하시면 정상적으로 HttpSecurity 타입의 객체가 반환되고 있습니다.
일반적으로 동일한 인터페이스 타입으로 동일한 이름을 가진 빈을 두개 이상 선언하지 않으면 오류가 발생하지 않기 때문에 AuthenticationDetailsSource authenticationDetailsSource 로 선언해도 상관없고 실제로 확인해 보면 authenticationDetailsSource 가 FormAuthenticationDetailsSource 타입의 객체로 DI 되고 있습니다.
다만 AuthenticationDetailsSource authenticationDetailsSource 했을 경우 FormLoginConfigurer<HttpSecurity> 가 아닌 FormLoginConfigurer 로 적용되어 최종 리턴타입이 HttpSecurity 가 아닌 SecurityBuilder 타입이 되는 부분은 아직 정확한 원인을 모르겠네요
우선 FormAuthenticationDetailsSource authenticationDetailsSource 게 선언하셔서 사용해 주시기 바랍니다.
정확한 원인을 알게 되면 다시 답변을 드리도록 하겠습니다.
0
8) 인증 부가 기능 - WebAuthenticationDetails, AuthenticationDetailsSource -> 14:06
--------------------------------------------------------------------------------------------------------------------------
9) 인증 성공 핸들러 : CustomAuthenticationSuccessHandler -> 8:30
@Autowired
private AuthenticationDetailsSource authenticationDetailsSource;
위의 코드가 사라짐
--------------------------------------------------------------------------------------------------------------------------
10) 인증 실패 핸들러 : CustomAuthenticationFailureHandler
@Autowired
private AuthenticationDetailsSource authenticationDetailsSource;
위의 코드가 여전히 없음
--------------------------------------------------------------------------------------------------------------------------
11) 인증 거부 처리 - Access Denied
위의 @Authwired쪽으로 화면이 올라가지 않아서 알 수 없음
--------------------------------------------------------------------------------------------------------------------------
위의 이유로 이러한 일이 발생한 것 같습니다.
강의 수정하시는데 도움이 되셨으면 좋겠습니다
답변 주셔서 감사합니다 강사님!
0
0
0
0
네
올려주신 내용을 보면 리턴되는 타입이 HttpSecurity 가 아닌 SecurityBuilder 로 나오는데
제가 해보니 HttpSecurity 가 리턴되고 있습니다.
재현이 안되고 있는데 혹시 해당 소스 올려 주실 수 있을까요?
리턴 타입을 AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> 제네릭으로 선언하면 잘 되는 것 같습니다!