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

标签 java angular spring spring-mvc spring-security

我在我的应用程序中使用 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

预期场景

  1. 应用程序已注销
  2. 用户输入网址:http://WEB-SITE/ReportModule/#/report
  3. 用户被重定向到登录页面
  4. 用户成功登录后,将被重定向到 http://WEB-SITE/ReportModule/#/report

尝试过的解决方案

尝试将 URL 保存到 session 中,并在登录后重定向用户。 此解决方案中的问题是当 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"
                />

最佳答案

您好,我不确定您用于保护网址的前端解决方案。我假设您正在使用 guard 来重定向用户。 从 '@angular/core' 导入 { Injectable } ; 从 '@angular/router' 导入 { 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 }});这就是您正在寻找的。

关于java - 登录后重定向到自定义网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355116/

相关文章:

java - 在 Webstart/JNLP 中部署 JavaFX

java - 无法通过 Windows 10 和 DLINK DIR-615 路由器中的 Java 代码获取 DNS 请求

java - 子类化 TestCase 并使用 JUnit 4 注释

angular - 如何在 Angular 7 中获取外部 URL 的参数

java - Spring Integration 3.0.1 Restful http-inbound-gateway 不会将请求主体转换为对象

java - 分析不同分支的 Maven 依赖关系

java - 在Java中设置Oracle 10g数据库连接超时

javascript - 如何使用 npm 3.8.9 和 Node 0.10.25 安装 Angular 2

javascript - Angular 错误this.mymethod is not a function

java - 使用 lombok 时是否应该实例化一个字段