У меня есть простой REST API, определенный с функциональными конечными точками Spring Webflux, который я пытаюсь защитить с помощью Spring Security.Я пытаюсь добавить AuthenticationWebFilter
, который в конечном итоге будет содержать собственную логику для проверки запросов.Моя текущая реализация всегда возвращает 403. Я подтвердил, что authentication.isAuthenticated()
возвращает true.Почему запросы к GET /message
не авторизуются?
@SpringBootApplication
@EnableWebFluxSecurity
class SecurityApplication {
@Bean
fun routes() = router {
GET("/message") { _ -> ServerResponse.ok().syncBody("Super secret message") }
}
@Bean
fun configureSecurity(httpSecurity: ServerHttpSecurity): SecurityWebFilterChain {
return httpSecurity
.httpBasic().disable()
.addFilterAt(authenticationFilter(), SecurityWebFiltersOrder.AUTHENTICATION).authorizeExchange().and().build()
}
}
fun main(args: Array<String>) {
runApplication<SecurityApplication>(*args)
}
fun authenticationFilter(): AuthenticationWebFilter {
val authenticationWebFilter = AuthenticationWebFilter { authentication -> Mono.just(authentication) }
authenticationWebFilter.setServerAuthenticationConverter { _ ->
val authentication = UsernamePasswordAuthenticationToken("user", "user", listOf())
Mono.just(authentication)
}
authenticationWebFilter.setRequiresAuthenticationMatcher(ServerWebExchangeMatchers.pathMatchers("/**"))
return authenticationWebFilter
}