Spring-Security-Oauth2:默认登录成功 url

Posted

技术标签:

【中文标题】Spring-Security-Oauth2:默认登录成功 url【英文标题】:Spring-Security-Oauth2: Default login success url 【发布时间】:2015-08-13 05:37:30 【问题描述】:

是否可以为 Spring Oauth2 Sso 服务设置默认登录成功 URL?

以下场景

    浏览器请求index.html sso 服务:不受保护 ==> 返回index.html index.html 包含 manifest 属性 ==> 浏览器请求清单 sso 服务:清单受保护 ==> 返回 401 客户端重定向到$sso.host/login sso 服务重定向到认证服务器 身份验证 ==> 使用查询字符串中的代码重定向回 $sso.host/login sso 服务:请求令牌并重定向到清单文件

有没有办法不重定向到最后请求的受保护资源,而是默认重定向到“index.html”?

即使没有办法实现,请告诉我

【问题讨论】:

你能分享一些代码吗,我不清楚你的意思。这有帮助吗?:setPreEstablishedRedirectUri 您好,感谢您的宝贵时间。很难把它放在一个最小的代码示例中。我明天试试。默认情况下,Spring Security 在登录后重定向到请求的最后一个资源,但它是安全的。因此,对于 Form-Login,我可以指定 loginSuccess url,但对于 oauth,我找不到这样的机制。明天我会看看你的提示。这个问题有点老了,我必须提醒自己我已经发现了什么 抱歉,我目前无法提供最小的代码示例 【参考方案1】:

有没有办法不重定向到最后请求的资源 受到保护,但默认重定向到“index.html”?

是的,在 WebSecurityConfigurerAdapter 中:

public class MyWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter 

[...]

@Override
protected void configure(HttpSecurity http) throws Exception 
    http
[...]
            .oauth2Login()
            .defaultSuccessUrl("index.html", true)
[...]

【讨论】:

【参考方案2】:

我有(我认为)一个类似的问题:在我的情况下,一旦 SSO 请求成功,用户就会被重定向到 /,这不是我想要的。

有一个内置的解决方案需要一些挖掘才能找到。

AbstractAuthenticationProcessingFilter 有一个方法setAuthenticationSuccessHandler 允许您控制它,因此如果您可以访问OAuth2ClientAuthenticationProcessingFilter,您可以将其设置为您想要的。

如果您有类似于教程的设置:https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_manual,那么您只需将以下内容添加到教程中创建的OAuth2ClientAuthenticationProcessingFilter

OAuth2ClientAuthenticationProcessingFilter oauth2Filter = new OAuth2ClientAuthenticationProcessingFilter("/XXXProvider/login");
oauth2Filter.setAuthenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler() 
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException 
        this.setDefaultTargetUrl("/my_preferred_location");
        super.onAuthenticationSuccess(request, response, authentication);
    
);

【讨论】:

HttpServletRequest 是哪个库? 我有同样的问题,如何在不创建新过滤器的情况下访问现有的 OAuth2ClientAuthenticationProcessingFilter? oauth2Login().defaultSuccessUrl(...)

以上是关于Spring-Security-Oauth2:默认登录成功 url的主要内容,如果未能解决你的问题,请参考以下文章

Spring 中的 spring-security-oauth2 与 spring-security-oauth2-core

spring-security-oauth2 - 从资源服务器检查ClientDetails

spring-security-oauth2中的HttpSecurity配置问题

如何处理 spring-security-oauth2 的版本升级?

spring-security-oauth2 替代品

spring-security-oauth2 2.0.7 刷新令牌 UserDetailsS​​ervice 配置 - UserDetailsS​​ervice 是必需的