๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽจ Projects/์—๋Ÿฌ๋ชจ์Œ

[์—๋Ÿฌ๋ชจ์Œ] The dependencies of some of the beans in the application context form a cycle

by HelloRabbit 2023. 3. 18.
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 ๊ฐ€ ๋˜์–ด ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค.

 

 

 

๋Œ“๊ธ€