首页 > 解决方案 > 在过滤器中处理可选的 JWT 身份验证是个好主意吗?

问题描述

我是 Spring Boot 的新手,我目前的项目是在 Spring Webflux 中开发的 REST API。目标是拥有一个具有可选 JWT 令牌的端点,允许您匿名或不匿名创建事物。但据我所知,Spring Security 的所有入门指南都非常复杂并且使用 Spring MVC。

现在我的想法是创造一个HandlerFilterFunction看起来像

class AuthenticationFilter : HandlerFilterFunction<ServerResponse, ServerResponse> {
    override fun filter(request: ServerRequest, next: HandlerFunction<ServerResponse>): Mono<ServerResponse> {
        val authHeader = request.headers().header("Authorization").firstOrNull()
        // get user from database
        request.attributes()["user"] = user
        return next.handle(request)
    }
}

并将其添加到router {...}bean 中。

这是个好主意,还是我应该去另一个路由器?如果是这样,有人可以向我指出 Spring Webflux 的 JWT 教程。

标签: springspring-securityjwtspring-webflux

解决方案


Spring Security 文档指向代码库中基于 JWT 的 WebFlux 资源服务器示例。

它不是基于 Kotlin 的,所以我刚才也发布了一个我自己的示例;希望它可以帮助您入门。

至于您的问题,是的,您可以创建自己的过滤器,尽管 Spring Security 附带BearerTokenAuthenticationFilter的过滤器已经完成了您的过滤器可能会做的事情。第一个链接示例手动添加此过滤器,而第二个示例让 Spring Boot 添加它。


推荐阅读