尽管成功,Spring Security OAuth2登录仍重定向到错误页面

为了不泄露机密信息,提供商将由代替$PROVIDER

授权有效,但没有将我重定向到索引,而是将我重定向到/error

  1. 启动应用程序
  2. 转到任何页面,它将重定向到http://localhost/oauth_login显示链接的我login
  3. 点击链接login(链接到http://localhost/oauth2/authorization/$PROVIDER
  4. 重定向到 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/

因为它具有全部功能(除了重定向之外),所以我不会发布整个安全配置,而是将其限制在相关代码中:

@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()

;

}

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/error

2018-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

回到顶部