8

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

这是来自弹簧配置文件的片段 -

<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实例,但是,这也不起作用。

有什么输入吗?

4

1 回答 1

6

在 Spring 中,有requestCache(将 SavedRequest 存储在 HttpSession 中)确定在身份验证过程中用于保存请求的策略,以便在用户通过身份验证后可以检索和重用它。

因此,当用户请求打开页面但该页面希望用户登录时,您必须将该请求存储在其中requestCache并且一旦身份验证成功,那么您必须获取已存储在 requestCatch 中的先前请求并重定向用户对该请求 以下信息可帮助您实现此目的。

请参阅此示例,它解释了您正在寻找的相同概念

好文章,它也以不同的方式详细解释了相同的概念

SavedRequestAwareAuthenticationSuccessHandler

在您的情况下,您必须使用身份验证成功策略,该策略可以利用 DefaultSavedRequest可能已由ExceptionTranslationFilter存储在会话中。当这样的请求被截获并需要认证时,请求数据被存储以在认证过程开始之前记录原始目的地,并允许在重定向到相同URL时重新构造请求。如果合适,此类负责执行到原始 URL 的重定向。

  • 如果该alwaysUseDefaultTargetUrl属性设置为true,则defaultTargetUrl将用于目的地。DefaultSavedRequest会话中存储的任何内容都将被删除。

  • 如果targetUrlParameter已在请求中设置,则该值将用作目的地。任何 DefaultSavedRequest 将再次被删除。

  • 如果DefaultSavedRequest在 RequestCache 中找到 a(ExceptionTranslationFilter在身份验证过程开始之前由记录原始目标设置),则将执行重定向到该原始目标的 Url。当DefaultSavedRequest接收到重定向的请求时,对象将保持缓存并被拾取(参见SavedRequestAwareWrapper)。

  • 如果没有DefaultSavedRequest找到,它将委托给基类。

于 2013-10-25T04:46:51.110 回答