5

我正在尝试将用户重定向回他们单击登录链接的页面。(页面对于未经身份验证的用户是只读的,但对于登录的用户是可写的。)如何在用户登录后将用户重定向回他们来自的地方?

我正在使用此链接将用户发送到登录页面:/spring_security_login?redirect=/item5。登录后,我希望用户被重定向到/item5页面。但是,它们总是被重定向到/页面。

这是我正在使用的配置:

<http use-expressions="true">
    <intercept-url pattern="/**" access="permitAll" />
    <form-login authentication-success-handler-ref="simpleUrlAuthenticationSuccessHandler"/>
</http>
<beans:bean id="simpleUrlAuthenticationSuccessHandler"
    class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
    <beans:property name="defaultTargetUrl" value="/"/>
    <beans:property name="targetUrlParameter" value="redirect"/>
</beans:bean>

似乎targetUrlParameter没有按预期得到。我正在使用 Spring Security 3.1.4

4

6 回答 6

7

使用 时应用以下规则SimpleUrlAuthenticationSuccessHandler

  • 如果 alwaysUseDefaultTargetUrl 属性设置为 true,则 defaultTargetUrl 属性将用于目标。
  • 如果请求中设置了与 targetUrlParameter 值匹配的参数,则该值将用作目标。默认情况下,它的值为“spring-security-redirect”。
  • 如果设置了 useReferer 属性,则将使用“Referer”HTTP 标头值(如果存在)。
  • 作为备用选项,将使用 defaultTargetUrl 值。

根据您的配置,这应该可以工作。我的猜测是您在表单登录中referer发送请求时没有传播。POST通常,您应该将referer值写入登录页面的隐藏字段中,以便将referer参数传输到spring_security_login.

于 2013-07-22T03:53:30.703 回答
2

将SimpleUrlAuthenticationSuccessHandler更改为SavedRequestAwareAuthenticationSuccessHandler并感到高兴。

于 2014-04-13T10:33:44.097 回答
1

因为这条线:

<beans:property name="defaultTargetUrl" value="/"/>

删除该行并重试。

于 2013-07-22T03:46:29.963 回答
1

使用SavedRequestAwareAuthenticationSuccessHandler而不是SimpleUrlAuthenticationSuccessHandler.

即使页面的 url 是在浏览器上键入的,在这种情况下referer不会被捕获,SavedRequestAwareAuthenticationSuccessHandler使用ExceptionTraslationFilter.

阅读http://docs.spring.io/spring-security/site/docs/3.0.x/reference/core-web-filters.html#form-login-flow-handlinghttp://docs.spring.io /autorepo/docs/spring-security/3.2.4.RELEASE/apidocs/org/springframework/security/web/authentication/SavedRequestAwareAuthenticationSuccessHandler.html

于 2015-03-03T08:46:07.547 回答
0

以下通用解决方案可与常规登录、Spring Social 登录或大多数其他 Spring Security 过滤器一起使用。

在您的 Spring MVC 控制器中,当加载只读页面时,如果用户尚未登录,则在会话中保存页面的路径。在 XML 配置中,设置默认目标 url。例如:

在您的 Spring MVC 控制器中,重定向方法应该从会话中读取路径并返回redirect:<my_saved_page_path>

因此,在用户登录后,他们将被发送到/redirect页面,该页面会立即将他们重定向回他们上次访问的页面。

于 2013-07-23T01:47:24.040 回答
0

LaurentG 已经解释了这一点。您可以在 spring 中传递 useReferer 参数。SavedRequestAwareAuthenticationSuccessHandler 和 SimpleUrlAuthenticationSuccessHandler 都可以正常工作。

这是您修改后的弹簧逻辑:

<http use-expressions="true">
    <intercept-url pattern="/**" access="permitAll" />
    <form-login authentication-success-handler-ref="simpleUrlAuthenticationSuccessHandler"/>
</http>

<beans:bean id="simpleUrlAuthenticationSuccessHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
     <beans:property name="defaultTargetUrl" value="/"/>
     <beans:property name="targetUrlParameter" value="redirect"/>
     <beans:property name="useReferer" value="true"/>
</beans:bean>
于 2017-02-14T10:17:32.863 回答