我目前正在使用SpringBoot 2.0.0.M7和spring-boot-starter-webflux开发应用程序。它还使用Spring Boot WebFlux Functional Rest API和Spring Boot Actuator。
应用程序本身非常简单,并且按预期工作。我可以将book(/ api / v1 / book)发布到ArrayList并从ArrayList获取所有书籍(/ api / v1 / book)。 Rest API文档可在(/)URL上获得,Actuator端点可在(/执行器)URL上获得。
问题是如何使用OAuth2和JWT保护我的WebFlux Functional Rest API?我可以在JWT中找到很多OAuth2示例,但它们适用于较旧的Spring Boot。下面是一个示例https://dzone.com/articles/spring-oauth2-with-jwt-sample SpringBoot 2.0.0.M7支持OAuth2登录,但此示例https://spring.io/blog/2017/09/15/spring-security-5-0-0-m4-released未说明如何在Rest API中使用OAuth2和JWT。我甚至没有找到该示例的完整源代码。此视频https://www.youtube.com/watch?v=LzNhedHo7pM和此示例https://medium.com/@mohitsinha.it/spring-boot-reactive-tutorial-ffab309b2dcd仅使用基本身份验证。
有谁知道如何使用@EnableWebFluxSecurity注释和OAuth2与JWT保护我的(/ api / v1 / book)端点?
以下是 RoutingConfiguration 类的示例。
@Configuration
@EnableWebFlux
public class RoutingConfiguration implements WebFluxConfigurer {
private final static String API_URL = "api";
private final MeterRegistry registry;
public RoutingConfiguration(MeterRegistry registry) {
this.registry = registry;
}
@Override
public void addCorsMappings(CorsRegistry corsRegistry) {
corsRegistry.addMapping(API_URL + "/**").allowedMethods("GET", "POST");
}
@Bean
public RouterFunction<?> indexRouter(final IndexHandler indexHandler, final ErrorHandler errorHandler) {
RouterFunctionMetrics metrics = new RouterFunctionMetrics(this.registry);
return route(GET("/"), indexHandler::getRestApiDocs).filter(metrics.timer("http.request.index.page"));
}
@Bean
public RouterFunction<?> bookRouter(final BookHandler handler, final ErrorHandler errorHandler) {
return
nest(path(API_URL + "/v1/book"),
nest(accept(MediaType.APPLICATION_JSON),
route(GET("/"), handler::getAllBooks)
.andRoute(POST("/"), handler::saveBook)
).andOther(route(RequestPredicates.all(), errorHandler::notFound))
);
}
}