我有一个页面,它有多个链接到应用程序中的其他页面。当用户访问网站时,就会显示系统页面,即使用户没有登录,也可以访问该页面。但是,如果用户单击其他链接(希望用户登录),用户将被正确地重定向到登录页面。但是,登录后,用户不会被重定向到单击的链接,而是被带到系统页面(系统页是默认的目标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"/>但是,我尝试使用authentication-success-handler-ref属性来引用一个SavedRequestAwareAuthenticationSuccessHandler实例,但这也不起作用。
有投入吗?
发布于 2013-10-25 04:46:51
在Spring中,有requestCache (它将SavedRequest存储在HttpSession中),它确定用于在身份验证过程中保存请求的策略,以便一旦用户通过身份验证就可以检索和重用请求。
因此,当用户请求打开页面但该页面期望用户登录时,您必须将该请求存储在requestCache中,一旦身份验证成功,那么您必须获得已经存储在requestCatch中的前一个请求,并将用户重定向到下面的请求,信息将帮助您实现这一点。
参见这个例子,它解释了您要寻找的相同的概念。
好文章,它也用一些不同的方式详细地解释了同样的概念。
SavedRequestAwareAuthenticationSuccessHandler:
在您的情况下,您必须使用身份验证成功策略,它可以使用DefaultSavedRequest,它可能已经由ExceptionTranslationFilter存储在会话中。当这样的请求被截获并需要身份验证时,请求数据被存储起来,以便在认证过程开始之前记录原始目的地,并允许在重定向到同一个URL时重建请求。如果适当,该类负责执行重定向到原始URL的操作。
alwaysUseDefaultTargetUrl属性设置为true,则defaultTargetUrl将用于目标。存储在会话中的任何DefaultSavedRequest都将被删除。targetUrlParameter,则该值将用作目标。任何DefaultSavedRequest都将再次被删除。DefaultSavedRequest中找到了一个RequestCache (按照ExceptionTranslationFilter设置,以便在身份验证过程开始之前记录原始目的地),则将执行重定向到该原始目的地的Url。DefaultSavedRequest对象将保持缓存状态,并在收到重定向请求时被拾取(请参见SavedRequestAwareWrapper)。DefaultSavedRequest,它将委托给基类。https://stackoverflow.com/questions/19580071
复制相似问题