至于不透露机密信息,提供者将被$PROVIDER
替换。
授权有效,但不是将我重定向到索引,而是将我重定向到/error
。
重现的步骤
http://localhost/oauth_login
的{{1}}。login
(链接到login
)http://localhost/oauth2/authorization/$PROVIDER
错误页面显示以下内容(我将其格式化以便于阅读):
http://localhost/error
这显然与默认的 Whitelabel错误页面上显示的参数相同,所以实际上唯一的问题是它在JSON中除了是HTML页面之外。如果我之后刷新{
"timestamp":"2018-04-05T14:18:47.720+0000",
"status":999,
"error":"None",
"message":"No message available"
}
,它会显示正常的 Whitelabel错误页面。
现在这就变得很奇怪,如果我在重定向到错误页面后尝试导航到http://localhost/error
,我就会被验证(用户数据在那里,所以授权成功)。基本上,问题是我被重定向到http://localhost/
而不是http://localhost/error
。
因为它功能齐全(除了重定向),我不会发布整个安全配置,但我会将其限制为相关代码:
SecurityConfiguration
http://localhost/
相关属性
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.csrf().disable()
.authorizeRequests().anyRequest()
.authenticated()
.and()
.oauth2Login()
.loginPage("/oauth_login")
.defaultSuccessUrl("/")
.failureUrl("/oauth_login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/oauth_login").permitAll()
;
}
相关信息
TL; DR 授权有效但重定向到spring.security.oauth2.client.registration.$PROVIDER.redirectUriTemplate=http://localhost/login/oauth2/code/$PROVIDER
而不是/error
。
答案 0 :(得分:1)
我实际上找到了我自己的问题的答案,但我决定发布它,以防有人遇到同样的问题。
/
应该是
.defaultSuccessUrl("/")
如果您未将其设置为.defaultSuccessUrl("/", true)
,它会自动将用户重定向到上一个上一个请求,在我的情况下,最后一个请求是针对网址true
,这解释了我的问题。
通过将其设置为/error
,您可以强制用户重定向到您的true
。
通过查看日志,您实际上可以看到它:
defaultSuccessUrl