【发布时间】:2020-04-06 05:55:22
【问题描述】:
我正在更新一个旧应用程序以使用 WebFlux,但是在使用 Spring Security 处理 JWT 验证时我有点迷失了。
现有代码(适用于标准 Spring Web)如下所示:
(验证 Firebase 令牌)
public class FirebaseAuthenticationTokenFilter extends AbstractAuthenticationProcessingFilter {
private static final String TOKEN_HEADER = "X-Firebase-Auth";
public FirebaseAuthenticationTokenFilter() {
super("/v1/**");
}
@Override
public Authentication attemptAuthentication(
final HttpServletRequest request, final HttpServletResponse response) {
for (final Enumeration<?> e = request.getHeaderNames(); e.hasMoreElements(); ) {
final String nextHeaderName = (String) e.nextElement();
final String headerValue = request.getHeader(nextHeaderName);
}
final String authToken = request.getHeader(TOKEN_HEADER);
if (Strings.isNullOrEmpty(authToken)) {
throw new RuntimeException("Invaild auth token");
}
return getAuthenticationManager().authenticate(new FirebaseAuthenticationToken(authToken));
}
但是,当切换到 WebFlux 时,我们会丢失 HttpServletRequest 和 HttpServletResponse。有一个 GitHub 问题,表明有一种替代方法/修复 https://github.com/spring-projects/spring-security/issues/5328 但是通过它,我无法确定实际更改了什么以使其工作。
Spring Security 文档虽然很棒,但并没有真正解释如何处理用例。
关于如何进行的任何提示?
【问题讨论】:
标签: java spring spring-security spring-webflux