尽管成功,Spring Security OAuth2登录仍重定向到错误页面
为了不泄露机密信息,提供商将由代替$PROVIDER
。
授权有效,但没有将我重定向到索引,而是将我重定向到/error
。
- 启动应用程序
- 转到任何页面,它将重定向到
http://localhost/oauth_login
显示链接的我login
。 - 点击链接
login
(链接到http://localhost/oauth2/authorization/$PROVIDER
) - 重定向到
http://localhost/error
错误页面显示以下内容(出于可读性考虑,我对其进行了格式化):
{ "timestamp":"2018-04-05T14:18:47.720+0000",
"status":999,
"error":"None",
"message":"No message available"
}
显然,这与默认的 Whitelabel Error Page 上显示的参数相同,因此,实际上,唯一的问题是它是JSON格式的,除了是HTML页面。如果
稍后 刷新http://localhost/error
,它将显示正常的 Whitelabel错误页面 。
现在这很奇怪,如果我http://localhost/
在重定向到错误页面后尝试导航到该页面,则我已通过身份验证(用户数据在那里,因此授权成功)。基本上,问题是我被重定向到http://localhost/error
而不是http://localhost/
。
因为它具有全部功能(除了重定向之外),所以我不会发布整个安全配置,而是将其限制在相关代码中:
@Overrideprotected 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()
;
}
spring.security.oauth2.client.registration.$PROVIDER.redirectUriTemplate=http://localhost/login/oauth2/code/$PROVIDER
- 在网站上通过身份验证后,我可以导航,刷新页面,执行我想做的所有事情(直到我注销)。
授权有效,但重定向到/error
而不是/
。
回答:
我实际上找到了我自己问题的答案,但是我还是决定将其发布,以防有人遇到相同问题。
.defaultSuccessUrl("/")
本来应该
.defaultSuccessUrl("/", true)
如果您未将其设置为true
,它将自动将用户重定向到上一个上一个请求,在我的情况下,上一个请求将发送到url /error
,这解释了我的问题。
通过将其设置为true
,您可以强制将用户重定向到您defaultSuccessUrl
所需要的任何位置。
通过查看日志,您实际上可以看到它:
2018-04-05 11:04:09 DEBUG [-nio-80-exec-10] RequestAwareAuthenticationSuccessHandler : Redirecting to DefaultSavedRequest Url: http://localhost/error2018-04-05 11:04:09 DEBUG [-nio-80-exec-10] o.s.security.web.DefaultRedirectStrategy : Redirecting to 'http://localhost/error'
以上是 尽管成功,Spring Security OAuth2登录仍重定向到错误页面 的全部内容, 来源链接: utcz.com/qa/434901.html