스프링 시큐리티에서 로그인 실패 시 사용자에게 따로 알려주지 않고 longin페이지로 이동을 하는데. 실패 메시지를 주고 싶었다.
하는 도중 이러한 에러가 떴고, 찾아보니 의존성 주입 무슨 충돌 이러한 얘기가 나왔다.
알고보니 (팀원분이 알려주셨다)
@Component
등록을 안해줬던 것...
핑계를 대보자면 등록하면서 에러를 찾다가 안되서 삭제를 했었는데 이것 또한 제대로 알고있지 않은 내 잘못이다,, 제대로 알아야 겠다..
@Component
어노테이션은 Bean Configuration 파일에 Bean을 따로 등록하지 않아도 사용할 수 있다.
빈 등록자체를 빈 클래스 자체에다가 할 수 있다는 의미이다.
또한 의존성 주입을 할 때 방법이 여러가지이다.
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final AuthenticationFailureHandler customFailureHandler;
private final JWTAuthProvider jwtAuthProvider;
private final HeaderTokenExtractor headerTokenExtractor;
public WebSecurityConfig(JWTAuthProvider jwtAuthProvider, HeaderTokenExtractor headerTokenExtractor, AuthenticationFailureHandler customFailureHandler) {
this.jwtAuthProvider = jwtAuthProvider;
this.headerTokenExtractor = headerTokenExtractor;
this.customFailureHandler = customFailureHandler;
}
이러한 코드를(생성자 주입)
@RequiredArgsConstructor
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final AuthenticationFailureHandler customFailureHandler;
private final JWTAuthProvider jwtAuthProvider;
private final HeaderTokenExtractor headerTokenExtractor;
}
@RequiredArgsConstructor
을 사용한 생성자 주입 / lombok
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationFailureHandler customFailureHandler;
@Autowired
private JWTAuthProvider jwtAuthProvider;
@Autowired
private HeaderTokenExtractor headerTokenExtractor;
이러한 식으로 해줄 수 있다.(필드 주입)
이 이외에도 setter주입이 있는데 읽기 쉽고, 사용하기 편하다는 것 말고는 장점이 없다고 한다.
생성자주입 고고!!
여기 에도 정리를 해놨으니 나중에 참고하면서 또 봐야겠다.
끝!