spring-boot - 使用 OAuth2 从 Spring Boot 1.4 迁移到 1.5
问题描述
尝试将 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中定义的模式匹配。
[...].AntPathRequestMatcher::matches::::::Checking match of request : '/v1/private/user'; against '/oauth/token'
...(same as above against other paths)...
[...].OrRequestMatcher::matches::::::No matches found
换句话说,这些“反对”都不像我在 configure( HttpSecurity http ) 中配置的那样:
http
.authorizeRequests()
.antMatchers( "/v1/**" )
.permitAll()
.and().csrf().disable()
Sprint Boot 1.4 中的相同代码运行良好,它确实按照预期检查传入的请求是否与该模式 /v1/** 相符。
我已经阅读了 Spring Boot 1.5 的发行说明,我认为这可能与此有关:
[...] 使用 @EnableWebSecurity 将关闭网络安全的所有自动配置,从而允许您完全控制。
请记住,该应用程序在 Spring Boot 1.3 和 1.4 中运行良好。当我升级到 1.5 时,我遇到了这个问题。
06/07 更新: Autowired FilterChainProxy 查看涉及的过滤器并在 2 个 Spring Boot 版本之间进行比较。如果我理解正确,那就是问题所在。在 1.4.x 版本中,FilterChainProxy 内部过滤器链的顺序基本是:
- OAuth auth* 过滤器链,匹配 /oauth/token、/oauth/token_key 和 /oauth/check_token。
- OAuth“受保护”端点。我相信资源服务器配置中的 HttpSecurity 中定义的东西。此处的过滤器链为此使用“NotOAuthRequestMatcher”匹配器。我相信,该链中的重要过滤器是 OAuth2AuthenticationProcessingFilter,它发挥了所有作用。
- 最后是使用 AnyRequestMatcher 匹配器的过滤器链。将匹配任何请求,并且该链中的重要过滤器是 UsernamePasswordAuthenticationFilter。这就是我相信的“用户工作流程”。
现在,当使用 1.5.x 时,不知何故,上面的#2 和#3 被切换了。这就解释了为什么我的 Web 服务请求没有到达我的 Web 服务端点。不明白为什么订单搞砸了(我的配置中没有使用任何@Order)。我猜是时候研究@Order了......
其他人遇到过这个问题吗?你是怎么解决的?
解决方案
果然,诀窍是将以下内容添加到我的WebSecurity ConfigurerAdapter扩展中:
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
在这里找到关于 SO 的答案。
推荐阅读
- python - 在发送到短信网关 python 的电子邮件中显示名称而不是电子邮件
- html - 获取隐藏在多选元素表单中的选择元素的值
- c# - 那么 DataGridView.Rows 和 DataGridView.SelectedRows 返回不同的“行”类型?
- javascript - 从 Javascript 对象数组中删除重复项和匹配子字符串的元素
- python - 避免路径中的换行符(Python)
- javascript - jQuery $.load 未执行
- node.js - webpack-cil TypeError:compiler.plugin 不是函数
- javascript - 如何调试从浏览器开始就冻结的 Google Chrome 中的选项卡?
- r - 错误:运行 HMM 时替换的长度为零 R
- python - 单击opencv上的白色块