我有一个页面,其中包含指向应用程序中其他页面的多个链接.当用户访问网站时,显示系统页面,即使用户未登录也可以访问.但是,如果用户点击其他链接,则需要用户登录,用户被正确地重定向到登录页面.但是,登录后,用户不会被重定向到单击的链接,而是将用户带到系统页面(系统页面是默认目标URL).
这是spring配置文件的片段 -
<logout logout-url="/logout"
logout-success-url="/login"
invalidate-session="true" />
<form-login login-page="/login"
login-processing-url="/j_security_check"
always-use-default-target="false"
authentication-failure-url="/login?failure=true"
username-parameter="username"
password-parameter="password"/>
Run Code Online (Sandbox Code Playgroud)
我尝试使用authentication-success-handler-ref属性来引用一个SavedRequestAwareAuthenticationSuccessHandler实例,但是,它也没有用.
有什么投入?
在Spring中,requestCache(在HttpSession中存储SavedRequest)确定在身份验证过程中用于保存请求的策略,以便在用户进行身份验证后可以检索并重用该策略.
因此,当用户请求打开页面但该页面需要用户登录时,您必须存储该请求requestCache,一旦身份验证成功,您必须获取已存储在requestCatch中的先前请求并重定向用户对该请求以下信息可帮助您实现此目的.
SavedRequestAwareAuthenticationSuccessHandler:
在您的情况下,您必须使用身份验证成功策略,该策略可以使用可能已由ExceptionTranslationFilter存储在会话中的 DefaultSavedRequest.当拦截这样的请求并且需要认证时,存储请求数据以在认证过程开始之前记录原始目的地,并且当重定向到相同URL时允许重建请求.如果适用,此类负责执行重定向到原始URL.
如果alwaysUseDefaultTargetUrl属性设置为true,defaultTargetUrl则将用于目标.DefaultSavedRequest存储在会话中的任何内容都将被删除.
如果targetUrlParameter已在请求中设置,则该值将用作目标.任何DefaultSavedRequest将再次被删除.
如果DefaultSavedRequest在RequestCache中找到a (由在ExceptionTranslationFilter开始身份验证过程之前记录原始目标而设置),则将对该原始目标的Url执行重定向.DefaultSavedRequest当收到重定向的请求时,该对象将保持缓存并被拾取(请参阅参考资料SavedRequestAwareWrapper).
如果DefaultSavedRequest找不到,它将委托给基类.