1

我有一个基于 Spring MVC 的应用程序,当会话过期时,用户会自动注销。再次登录后,我想将用户重定向到他所在的最后一页,我该怎么做。目前,这正在发生

User is on: http://localhost:8080/MYAPP/home/#/access/userManagement

现在,当会话到期时,

User is on: http://localhost:8080/MYAPP/auth/login#/access/userManagement

再次登录后,

User is on: http://localhost:8080/MYAPP/home/

这是我的配置

<security:form-login
                login-page="/auth/login"
                default-target-url="/home/"
                always-use-default-target="false"
                authentication-failure-url="/auth/login?error=true"/>

我还需要什么设置才能将用户重定向到最后打开的页面???

4

1 回答 1

2

你可以自己写:

<security:form-login
                login-page="/auth/login"
                authentication-success-handler-ref="customAuthenticationSuccessHandler"
                always-use-default-target="false"
                authentication-failure-url="/auth/login?error=true"/>

<bean id="customAuthenticationSuccessHandler" class=".....MyAuthenticationSuccessHandler">

MyAuthenticationSuccessHandler可以扩展SavedRequestAwareAuthenticationSuccessHandler

成功验证后,它会根据以下情况决定重定向目标:

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

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

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

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

所以基本上,您需要替换默认的目标 URL 行为并用您自己的行为覆盖它。

希望这有帮助。干杯。

于 2013-07-10T07:56:34.750 回答