Конфигурация Spring Security: POST-запрос к конечной точке возвращает ошибку через API Gateway, но работает через обычный порт
Я работаю над приложением Spring Boot с Spring Security и столкнулся с проблемой в конфигурации безопасности.
Я хочу разрешить неаутентифицированный доступ к конечной точке /auth/register для регистрации пользователей.
Однако, когда я отправляю POST-запрос к /auth/register через API Gateway, я получаю ответ "403 Forbidden".
В то же время, при отправке запроса напрямую на обычный порт приложения всё работает корректно.
Вот моя конфигурация безопасности:
@Configuration
@EnableWebSecurity
public class AuthConfig {
@Bean
public UserDetailsService userDetailsService(){
return new CustomUserDetailsService();
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.csrf().disable()
.authorizeHttpRequests()
.requestMatchers("/auth/register").permitAll()
.and()
.build();
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception {
return config.getAuthenticationManager();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public AuthenticationProvider authenticationProvider(){
DaoAuthenticationProvider authenticationProvider=new DaoAuthenticationProvider();
authenticationProvider.setUserDetailsService(userDetailsService());
authenticationProvider.setPasswordEncoder(passwordEncoder());
return authenticationProvider;
}
}
@RestController
@RequestMapping("/auth")
public class AuthController {
@PostMapping("/register")
public String addNewUser(@RequestBody UserCredential userCredential){
return authService.saveUser(userCredential);
}
}
@Service
public class AuthService {
@Autowired
private UserCredentialRepository repository;
@Autowired
private PasswordEncoder passwordEncoder;
public String saveUser(UserCredential credential){
credential.setPassword(passwordEncoder.encode(credential.getPassword()));
repository.save(credential);
return "user added to the system";
}
}
Вот gateway properties:
spring.cloud.gateway.routes[2].id=auth-service
spring.cloud.gateway.routes[2].uri=http://localhost:8083
spring.cloud.gateway.routes[2].predicates[0]=Path=/auth/**
spring.cloud.gateway.routes[2].filters[0]=RewritePath=/auth/(?<segment>.*), /${segment}
spring.cloud.gateway.routes[2].filters[1]=AddRequestHeader=X-Request-ServiceName, auth-service
Вот auth properties:
server.port=8083
spring.application.name=auth-service
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
logging.level.org.springframework.security=DEBUG
o.s.security.web.FilterChainProxy : Securing POST /auth/register o.s.security.web.FilterChainProxy : Secured POST /auth/register Hibernate: insert into user_credential (email, name, password) values (?, ?, ?) : Set SecurityContextHolder to anonymous SecurityContext o.s.security.web.FilterChainProxy : Securing POST /register o.s.s.w.a.AnonymousAuthenticationFilter : Set SecurityContextHolder to anonymous SecurityContext o.s.s.w.s.HttpSessionRequestCache : Saved request http://localhost:8083/register?continue to session o.s.s.w.a.Http403ForbiddenEntryPoint : Pre-authenticated entry point called. Rejecting access o.s.security.web.FilterChainProxy : Securing POST /error o.s.s.w.a.AnonymousAuthenticationFilter : Set SecurityContextHolder to anonymous SecurityContext o.s.s.w.s.HttpSessionRequestCache : Saved request http://localhost:8083/error?continue to session Pre-authenticated entry point called. Rejecting access