Auth0 Spring Security(BearerSecurityContextRepository)中的间歇性空指针

时间:2019-03-28 14:34:01

标签: java spring-security auth0

我的团队正在使用Auth0保护我们所有的Spring Boot服务。它可以在99%的时间内正常运行,但是我们的其中一项服务在收到请求时会失败,并返回空指针。

这仅在使用Linux构建映像并针对服务运行@SpringBootTest测试时在CI构建期间发生。在开发人员机器上,一切都很好,在Windows构建映像上,一切都很好。

失败的服务在所有我能找到的其他方面都是相同的,所以这对我来说是个谜。

失败的代码在Auth0春季安全性库的BearerSecurityContextRepository中。

相关代码如下:

SecurityContext context = SecurityContextHolder.createEmptyContext();
String token = tokenFromRequest(requestResponseHolder.getRequest());
Authentication authentication = PreAuthenticatedAuthenticationJsonWebToken.usingToken(token);
if (authentication != null) {
    context.setAuthentication(authentication);
    logger.debug("Found bearer token in request. Saving it in SecurityContext");
}

第5行上的上下文对象返回null并爆炸。我查看了SecurityContextHolderStrategy可以使用的每种可能的实现,该实现都在类路径上,并且看不到createEmptyContext()调用返回为null的任何情况。每个实现似乎都只是返回一个新的SecurityContextImpl。

在我看来,这一定是导致此问题的Linux构建映像环境中的某件事(我们构建的后期部分要求我们使用Linux或我只是切换到Windows映像)。

我希望真正了解Spring安全性内部知识的人可以给我一些提示,指出可能是什么原因导致该问题,以便我可以更深入地了解图像。或者,如果我不在基地上,那又是另外一回事,那就是可以拯救生命的指针。

谢谢!

0 个答案:

没有答案