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 2.0.7 刷新令牌 UserDetailsService 配置 - UserDetailsService 是必需的