개요
간혹 필터체인에서 참조하는 컴포넌트에서 PasswordEncoder 등 필터체인이 정의된 Configuration에 정의된 Bean을 사용해야해 문제가 발생하는 경우가 있다. 바로 하위가 아니더라도 UserService라던지... 회원가입 로직에서 사용하거나 할경우 발생한 적이 많았다.
그래서 다음과 같이 분리하는 방법을 자주 애용한다.
@Configuration
class SecurityBeanGenerator {
@Bean
public UserDetailsService userDetailsService(UserRepository userRepository) {
return username -> {
UserEntity userEntity = userRepository.findByUsername(username)
.orElseThrow(() -> new RuntimeException(
"로그인 정보가 존재하지 않습니다."));
return new UserWithPassword(userEntity.getId(), userEntity.getUsername(),
userEntity.getPassword(), userEntity.getRoles());
};
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
class SecurityConfig {
private final ObjectMapper objectMapper;
private final OAuth2Loader oAuth2Loader;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
}
}
* 빈 생성 분리 (순환참조 해결) · jsween5723/spring-security-tistory@2788530
jsween5723 committed Aug 31, 2024
github.com
'Spring > Spring Security' 카테고리의 다른 글
Spring Security 6 - 세션 기반 인증 유지 | Authentication Persistence (0) | 2024.09.01 |
---|---|
부록: JPA 엔티티에 UserDetails, OAuth2User 구현하지 말기 (0) | 2024.09.01 |
Spring Security 6 - OAuth 2 Client 간편 로그인 | 카카오 로그인 (3) | 2024.08.31 |
Spring Security 6 - 일반 로그인 | 폼 로그인 (1) | 2024.08.30 |
Spring Security 6 - 컴포넌트 빈 정의 (0) | 2024.08.29 |