我在我的应用程序中使用 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 保存到 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 }});这就是您正在寻找的。p>
关于java - 登录后重定向到自定义网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355116/