🎨 Projects/μ—λŸ¬λͺ¨μŒ

[μ—λŸ¬λͺ¨μŒ] The dependencies of some of the beans in the application context form a cycle

HelloRabbit 2023. 3. 18. 23:27
728x90

μ—λŸ¬ μ„€λͺ…

μžλ°” ν”„λ‘œμ νŠΈ 쀑 2개의 ν΄λž˜μŠ€κ°€ μ„œλ‘œλ₯Ό μ°Έμ‘°ν•˜λŠ” ν˜•νƒœλ₯Ό κ°€μ§ˆ λ•Œ μƒκΈ°λŠ” μ—λŸ¬

μ—λŸ¬ λ©”μ„Έμ§€

SecurityConfig.java

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter{

	@Autowired
	private PrincipalOauth2UserService principalOauth2UserService;
	
	// λ¬Έμ œλ˜λŠ” λΆ€λΆ„
	@Bean
	public BCryptPasswordEncoder encodePwd() {
		return new BCryptPasswordEncoder();
	}
}

 

PrincipalOauth2UserService.java

@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService {
	
	// λ¬Έμ œλ˜λŠ” λΆ€λΆ„
	private BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
}
  • SecurityConfig --> PrincipalOauth2UserService --> BCryptPasswordEncoder --> SecurityConfig κ°€ λ˜μ–΄ μˆœν™˜ μ°Έμ‘° λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

 

ν•΄κ²°

1. μ°Έμ‘°λ˜λŠ” λ©”μ„œλ“œλ₯Ό main으둜 μ΄λ™ν•˜κΈ°

 

GuguMain.java

@SpringBootApplication
@EnableJpaAuditing
public class GuguMain {

	// μ΄λŸ°μ‹μœΌλ‘œ main ν΄λž˜μŠ€μ—μ„œ λΉˆμ— λ“±λ‘μ‹œν‚€κΈ°
	@Bean
	public BCryptPasswordEncoder encodePwd() {
		return new BCryptPasswordEncoder();
	}
	
	public static void main(String[] args) {
		SpringApplication.run(GuguMain.class, args);
	}

}

 

2. μ°Έμ‘°λ˜λŠ” λ©”μ„œλ“œλ₯Ό λ‹€λ₯Έ κ°œλ³„ 클래슀둜 μ΄λ™ν•˜κΈ°

 

CustomBCryptPasswordEncoder.java

@Component
public class CustomBCryptPasswordEncoder {
	// μ•„λž˜μ²˜λŸΌ 빈 등둝할 수 있음
	public class CustomBCryptPasswordEncoder extends BCryptPasswordEncoder {

}

 

 

 

SecurityConfig.java

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter{

	@Autowired
	private PrincipalOauth2UserService principalOauth2UserService;
}
  • μ•žμ„œμ„œ λ¬Έμ œλ˜μ—ˆλ˜ μ½”λ“œ 제거

PrincipalOauth2UserService.java

@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService {
	
	// 빈 μ»¨ν…Œμ΄λ„ˆμ— λ“±λ‘λ˜μ–΄ μžˆλŠ” BCryptPasswordEncoder μ‚¬μš©ν•˜κΈ°
	@Autowired
	private BCryptPasswordEncoder bCryptPasswordEncoder;
}
  • SecurityConfig.java μ—μ„œ 더 이상 BCryptPasswordEncoder 빈 등둝을 ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ„œλ‘œ μ°Έμ‘°ν•˜λŠ” ν˜•νƒœκ°€ μ•„λ‹ˆλΌ SecurityConfig --> PrincipalOauth2UserService --> BCryptPasswordEncoder κ°€ λ˜μ–΄ μˆœν™˜ μ°Έμ‘°κ°€ ν•΄κ²°λœλ‹€.