작성
·
1.9K
0
제일 최근에 질문한 글 참고해도 적용이 안되네요...
혹시 현재 버전에서 적용 가능한 코드가 있을까요?
아니면 참고할 수 있는 자료라도 있을까요?
https://start.spring.io/ 에서 gradle로 생성해서 사용중입니다. 스프링 3.2버전 사용하고있어요.
답변 7
2
지금은 github 소스를 참고해도 안되네요.
springboot 3.3.0, security-core 6.3.0
제가 설정한 방법 공유합니다.
혹시나 도움이 될까 싶어 올려요.
(2024-07-21) AuthenticationFilter 추가 시 userService 관련하여 순환참조 오류를 해결한 소스입니다.
@Slf4j
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurity {
private final Environment env;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http,
AuthenticationManager authenticationManager,
UserService userService) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(authorize ->
authorize.requestMatchers("/users/**").permitAll()
.requestMatchers("/actuator/**").permitAll()
.requestMatchers("/health-check/**").permitAll()
.requestMatchers("/error/**").permitAll()
.requestMatchers("/**").access((authentication, request) -> {
String clientIp = request.getRequest().getRemoteAddr();
log.debug("client ip is = {}", clientIp);
// 허용된 IP 리스트
String[] allowedIps = {"192.168.35.194", "192.168.35.195", "192.168.35.196"};
// IP가 허용된 리스트에 포함되어 있는지 확인
boolean isAllowed = Arrays.asList(allowedIps).contains(clientIp);
return new AuthorizationDecision(isAllowed);
})
)
.authenticationManager(authenticationManager)
// 사용자 세션 저장하지 않음
.sessionManagement(configurer -> configurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
// 응답 헤더에 X-Frame-Options 추가 - 클릭재킹 공격 방어 - 동일 출처만 <iframe> 로드 가능.
.headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin))
.addFilter(customAuthenticationFilter(authenticationManager, userService));
return http.build();
}
/**
* authenticationManager bean 생성
* @param http HttpSecurity
* @return authenticationManager bean
*/
@Bean
public AuthenticationManager authenticationManager(HttpSecurity http,
UserService userService,
BCryptPasswordEncoder passwordEncoder) throws Exception {
AuthenticationManagerBuilder authenticationManagerBuilder = http.getSharedObject(AuthenticationManagerBuilder.class);
authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(passwordEncoder);
return authenticationManagerBuilder.build();
}
/**
* customAuthenticationFilter bean 생성
* @return customAuthenticationFilter bean
*/
@Bean
public CustomAuthenticationFilter customAuthenticationFilter(AuthenticationManager authenticationManager,
UserService userService) {
return new CustomAuthenticationFilter(authenticationManager, userService, env);
}
/**
* 비밀번호 암호화 모듈
* @return 암호화 bean
*/
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
1
안녕하세요, 이도원입니다.
강좌에서 사용된 샘플 코드를 최신 버전으로 업데이트 하였습니다.
아래 github 에서 확인해 보실 수 있습니다.
https://github.com/joneconsulting/toy-msa
감사합니다.
1
이게 답변이 될 수 있을지 모르겠는데요.. 저도 공부하면서 뭔가 틀려서 여러 삽질을 통해서 코드 변경해가면서 하고 있어서
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurity {
private final UserService userService;
private final BCryptPasswordEncoder bCryptPasswordEncoder;
private final Environment env;
private final AuthenticationConfiguration authenticationConfiguration;
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations());
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/actuator/**").permitAll();
http.csrf().disable()
.authorizeRequests().antMatchers("/**")
.hasIpAddress("192.168.0.7")
.and()
.addFilter(getAuthenticationFilter(authenticationConfiguration))
.headers().frameOptions().disable();
return http.build();
}
private AuthenticationFilter getAuthenticationFilter(AuthenticationConfiguration authenticationConfiguration) throws Exception {
AuthenticationFilter authenticationFilter = new AuthenticationFilter(authenticationManager(authenticationConfiguration), userService, env);
return authenticationFilter;
}
@Bean
AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
}
0
안녕하세요, 이도원입니다.
현재 Spring Boot 3.2 + Spring Cloud 2023.0.0 버전으로 된 실습 코드를 공유해 드리고 있습니다. 관련 실습 코드에 대한 강의 콘텐츠도 업로드 되었습니다. 혹시 아래 코드로 실행하실 때에도 오류가 발생하는 건지 확인해 주실 수 있을끼요? 오류가 발생 되셨다면 관련 부분은 한번 더 공유해 주시면 감사드리겠습니다.
새로운 소스 코드는 아래 Github에 공유 되어 있고, Branch는 main이 아니라 springboot3.2 Branch를 사용하시기 바랍니다.
https://github.com/joneconsulting/toy-msa/tree/springboot3.2
감사합니다.
0
섹션 4. Users Microservice ➀ Spring Security 코드 입니다.
@Configuration
@EnableWebSecurity
public class WebSecurity {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf(csrf->csrf.disable());
http.authorizeHttpRequests(request->{
request.requestMatchers(antMatcher("/users/**")).permitAll();
request.requestMatchers(antMatcher("/h2-console/**")).permitAll();
});
http.headers(headers->headers.frameOptions(frameOptions->frameOptions.disable()));
return http.build();
}
}
0
여기 코드 참고해서 작성했습니다.
섹션6 기준으로 나머지 코드는 변수명 정도만 수정했고, WebSecurity코드는 이렇게 바꿔서 사용했어요.
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurity {
private final UserService userService;
private final Environment environment;
private final AuthenticationConfiguration authenticationConfiguration;
private final AuthenticationManager authenticationManager;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(request ->{
request.requestMatchers(antMatcher("/**")).permitAll();
})
.addFilter(getAuthenticationFilter(authenticationConfiguration));
http.headers().frameOptions().disable(); //H2 Console 설정
return http.build();
}
private AuthenticationFilter getAuthenticationFilter(AuthenticationConfiguration authenticationConfiguration) throws Exception {
AuthenticationFilter authenticationFilter = new AuthenticationFilter(authenticationManager, userService, environment);
return authenticationFilter;
}
}
0
안녕하세요, 인프런 AI 인턴입니다.
스프링 시큐리티를 사용하는 데 문제가 있으시군요.
스프링 부트 참조 문서의 “18. “How-to” Guides > 18.14. Security” 섹션을 참고하시면 현재 버전의 스프링 부트에 적용 가능한 스프링 시큐리티 관련 정보를 얻으실 수 있습니다.
자세한 내용과 가이드는 스프링 시큐리티 프로젝트 페이지에서 확인하실 수 있습니다.
또한, 스프링 부트에 관련된 다양한 상황의 질문과 답변이 필요하다면 Stack Overflow의 spring-boot
태그가 붙은 글을 참조하시거나, 새 질문을 하실 수도 있습니다.
현재 문서는 스프링 부트 3.1.5 버전을 기준으로 하고 있지만, 스프링 부트 3.2 버전에서도 동일하게 적용될 수 있는 내용이 많으니 참고하시면 도움이 될 것입니다.
참고 문서 URL: Spring Boot Reference Documentation - Security
오류가 지속되거나 구체적인 코드를 찾기 어려우시면, 추가적으로 문의 주시면 답변 드리도록 하겠습니다. 흑후추님, 문제 해결을 위한 참고 자료가 도움이 되길 바랍니다.
혹시 스프링이랑 시큐리티 버전이 어떻게되나요?