使用OAuth2从Spring Boot 1.4迁移到1.5

时间:2019-06-06 17:28:31

标签: spring-boot spring-oauth2

试图将1.3.x中的“旧” Sprint Boot + Spring OAuth2应用程序升级到2.1.5.RELEASE或当时的情况。

我只是试图一次做到这一点。 我将其从Spring Boot 1.3升级到1.4,一切似乎都正常运行。

问题是从1.4到1.5。基本上,受资源服务器保护的Web服务似乎根本没有受到攻击(我相信它会退回到WebSecurity / User工作流程,返回302重定向到登录页面)。

从日志中可以看到,它甚至没有试图将我的请求与在 ResourceServerConfigurerAdapter 中定义的模式进行匹配。

handler

换句话说,这些“反对”都不像我在configure(HttpSecurity http)中配置的那样,简单地是:

CustomCell

Sprint Boot 1.4中的相同代码可以正常工作,并且确实按照预期的模式/ v1 / **检查传入的请求。

我已经阅读了Spring Boot 1.5的发行说明,并且我认为它可能与this有关:

  

[...]使用@EnableWebSecurity将关闭Web安全性的所有自动配置,从而使您可以完全控制。

记住,该应用程序在Spring Boot 1.3和1.4中运行良好。当我升级到1.5时,我遇到了这个问题。

更新06/07: 自动连接FilterChainProxy以查看所涉及的过滤器并在2个Spring Boot版本之间进行比较。如果我理解正确,那就是问题所在。 在1.4.x版本中,FilterChainProxy内部的过滤器链的顺序基本上是:

  1. OAuth auth *过滤器链,匹配/ oauth / token,/ oauth / token_key和/ oauth / check_token。
  2. OAuth“受保护”端点。我相信Resource Server配置中HttpSecurity中定义的内容。此处的过滤器链为此使用“ NotOAuthRequestMatcher”匹配器。我相信,该链中最重要的过滤器是OAuth2AuthenticationProcessingFilter,可以做所有的事情。
  3. 最后是一个使用AnyRequestMatcher匹配器的过滤器链。将匹配任何请求,并且该链中的重要过滤器为UsernamePasswordAuthenticationFilter。我相信这就是“用户工作流程”。

现在使用1.5.x时,以上的#2和#3会以某种方式进行切换。这就解释了为什么我的所有Web服务请求都没有到达我的Web服务端点。 不明白为什么订单搞乱了(我在配置中不使用任何@Order)。我该来看看@Order的时候了...

还有其他人遇到过这个问题吗?您是如何解决的?

1 个答案:

答案 0 :(得分:0)

果然,诀窍是在我的 WebSecurity ConfigurerAdapter 扩展名中添加以下内容:

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)

在SO here上找到了答案。