Spring 安全性:修改过滤器链后突然出现类路径和 Thymeleaf 相关问题

Spring Security: sudden classpath and Thymeleaf related issues after modifying the filter chain

我正在尝试将 waffle-spring-security4 与现有的 Spring 启动项目集成,其中大部分配置都是自动进行的。我注意到当 NegotiateSecurityFilter 在链中时,会发生一些奇怪的事情:我在用一个 String 属性 初始化一个完全微不足道的 class 时得到 ClassNotFoundException;以前可以正常加载的 Thymeleaf 模板现在无法解析等等。发生这种情况时,我在链中有以下过滤器:

  1. WebAsyncManagerIntegrationFilter
  2. SecurityContextPersistenceFilter
  3. HeaderWriterFilter
  4. CsrfFilter
  5. LogoutFilter
  6. NegotiateSecurityFilter(来自华夫饼)
  7. BasicAuthenticationFilter
  8. RequestCacheAwareFilter
  9. SecurityContextHolderAwareRequestFilter
  10. SessionManagementFilter
  11. ExceptionTranslationFilter
  12. FilterSecurityInterceptor

切换回 HTTP 基本身份验证后,问题消失了,所以我认为问题可能出在上面的过滤器上。你知道如何解决这个问题吗? (如果您有任何调试类似问题的策略,那就太好了。)

是的,事实证明这是华夫饼造成的。

问题在于,一旦您使用 Waffle 完成了成功的身份验证,对于 运行 的其余部分,则无法访问必要的文件。这导致所有试图从 class 路径加载内容的东西都惨遭失败。我必须在这里补充一点,我已经尝试使用 gradle bootRun 从源代码 运行 并通过构建 jar 和 运行 代替它;在第一种情况下,Thymeleaf 解析失败,在第二种情况下,未找到 Spring class。

事实证明,如果远程用户(通过 SSO 登录)没有文件的读取权限,一旦用户通过身份验证,应用程序将不再正常运行!我不知道华夫饼引起的这种环境变化,因为我不记得在文档上看到过任何关于它的信息——但它是有道理的。在我授予用户读取权限后,它开始工作了。