我在我的应用程序中使用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
预期的情况
尝试过的解决方案
试图将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"
/>
答案 0 :(得分:0)
您好,我不确定您用于保护url的前端解决方案。我认为您在使用防护措施来重定向用户。 从“ @ angular / core”导入{可注射}; 从'@ 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>