인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

강프로그래머님의 프로필 이미지
강프로그래머

작성한 질문수

스프링 시큐리티

11) 인증 거부 처리 - Access Denied

(해결완료) exceptionHandling()을 사용할 수가 없습니다

해결된 질문

작성

·

621

8

무엇이 문제인건가용...?

답변 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 게 선언하셔서 사용해 주시기 바랍니다.

정확한 원인을 알게 되면 다시 답변을 드리도록 하겠습니다. 

리턴 타입을 AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> 제네릭으로 선언하면 잘 되는 것 같습니다!

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

죄송합니다 강사님

private 상태였네요 ㅠㅠ

다시 public 상태로 변경했습니다!

0

정수원님의 프로필 이미지
정수원
지식공유자

죄송하지만 url 정보가 없는 것으로 나옵니다

다시 한번 확인 부탁드립니다.

0

강사님 답변주셔서 감사합니다!

https://github.com/KMSKang/basicsecurity

깃헙에 푸쉬해서 올려드립니다!

0

정수원님의 프로필 이미지
정수원
지식공유자

올려주신 내용을 보면 리턴되는 타입이 HttpSecurity 가 아닌 SecurityBuilder 로 나오는데

제가 해보니 HttpSecurity 가 리턴되고 있습니다.

재현이 안되고 있는데 혹시 해당 소스 올려 주실 수 있을까요?

강프로그래머님의 프로필 이미지
강프로그래머

작성한 질문수

질문하기