首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring 3.1:登录无效后重定向

Spring 3.1:登录无效后重定向
EN

Stack Overflow用户
提问于 2013-10-25 02:21:24
回答 1查看 3.5K关注 0票数 8

我有一个页面,它有多个链接到应用程序中的其他页面。当用户访问网站时,就会显示系统页面,即使用户没有登录,也可以访问该页面。但是,如果用户单击其他链接(希望用户登录),用户将被正确地重定向到登录页面。但是,登录后,用户不会被重定向到单击的链接,而是被带到系统页面(系统页是默认的目标url)。

这里是spring配置文件的片段-

代码语言:javascript
复制
<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实例,但这也不起作用。

有投入吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,它将委托给基类。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19580071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档