登录后重定向到自定义网址

Posted

技术标签:

【中文标题】登录后重定向到自定义网址【英文标题】:Redirect to custom url after login 【发布时间】:2020-04-08 19:51:39 【问题描述】:

我在我的应用程序中使用 Spring security + Angular。 并在 spring-security.xml 中指定以下表单登录

<security:form-login
               always-use-default-target="true"
               login-page="/login"
               default-target-url="/login"
               login-processing-url="/perform_login"
               authentication-failure-url="/login?error"
               username-parameter="username"
               password-parameter="password"
               />

这会将用户重定向到正常工作的登录页面。

但现在我想增强它以记住登录前和成功登录后重定向到该页面的 url

预期场景

    应用程序已注销 用户输入网址:http://WEB-SITE/ReportModule/#/report 用户被重定向到登录页面 一旦用户成功登录,它就会被重定向到http://WEB-SITE/ReportModule/#/report

尝试过的解决方案

尝试将 url 保存到会话中,并在登录后重定向用户。 此解决方案中的问题是当输入到浏览器应用程序的 http://WEB-SITE/ReportModule/#/report 被重定向到 http://WEB-SITE/login/#/report 时,缺少部分 url (ReportModule/#/report) 来存储。

有什么办法可以做到这一点

答案:

通过 AuthenticationSuccessHandler 和 useReferer 找到解决方案

<bean id="AuthenticationSuccessHandler"
          class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
        <property name="useReferer" value="true"/>
    </bean>
<security:form-login
                always-use-default-target="true"
                login-page="/login"
                default-target-url="/login"
                login-processing-url="/perform_login"
                authentication-failure-url="/login?error"
                username-parameter="username"
                password-parameter="password"
                authentication-success-handler-ref="AuthenticationSuccessHandler"
                />

【问题讨论】:

你试过HTTP referer header吗?它会向您显示原始呼叫开始的位置 【参考方案1】:

您好,我不确定您保护 url 的前端解决方案。我假设您正在使用保护来重定向用户。 从'@angular/core'导入可注射; 从'@angular/router'导入路由器,CanActivate,ActivatedRouteSnapshot,RouterStateSnapshot;

@Injectable() 导出类 AuthGuard 实现 CanActivate

constructor(private router: Router)  

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) 
    if (localStorage.getItem('currentUser')) 
        // logged in so return true
        return true;
    

    // not logged in so redirect to login page with the return url and return false
    this.router.navigate(['login'],  queryParams:  returnUrl: state.url );
    return false;

this.router.navigate(['login'], queryParams: returnUrl: state.url );这就是你要找的。​​p>

【讨论】:

以上是关于登录后重定向到自定义网址的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 登录后重定向到自定义 url

php [Incsub支持] - 在新票提交后重定向到自定义感谢页面。

Laravel 8 Jetstream如何在重置密码后将用户重定向到自定义路由

根据带有参数的wordpress上的位置重定向到自定义网址

将 Wordpress 的登录/注册页面重定向到自定义登录/注册页面

Spring SAML Okta - 如何在 IDP 启动的流程中重定向到自定义 URL