Добавление AuthenticationWebFilter в WebFlux - PullRequest
0 голосов
/ 04 октября 2018

У меня есть простой 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
}
...