使spring security在登录页面的查询字符串中添加返回url

Posted

技术标签:

【中文标题】使spring security在登录页面的查询字符串中添加返回url【英文标题】:Make spring security add the return to url in the query string for the login page 【发布时间】:2011-06-09 11:23:43 【问题描述】:

早些时候我asked 如果可以在 Spring Security 2 的表单登录页面中获取原始请求 url。结果这实际上对我没有帮助,我需要的是重定向到表单登录页面将其作为请求参数嵌入其中。所以如果我有:

<form-login login-page="/login.html" /> 

并尝试访问/secure.html 我想以/login.html?return_to=/secure.html 结束。

【问题讨论】:

我尝试了这个解决方案并且它有效:***.com/questions/34087954/… 【参考方案1】:

我猜你需要使用spring-security-redirect。本质上,如果您的 url 是 /login.html?spring-security-redirect=/secure.html 的形式,spring security 将在成功登录时自动重定向到 secure.html。

从 spring 3.1.x 开始,这不再是开箱即用的。您需要添加:

authentication-success-handler-ref="simpleUrlAuthenticationSuccessHandler"

...到您的 元素并添加一个如下所示的 bean:

<!-- Emulates the functionality of spring security 3.0.x by specifying the targetUrlParameter to be the value it
    defaulted to in 3.0.x. As of 3.1.x this is null by default with no option to specify in <form-login> -->
<beans:bean id="simpleUrlAuthenticationSuccessHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
    <beans:property name="useReferer" value="true"/>
    <beans:property name="defaultTargetUrl" value="/account"/>
    <beans:property name="targetUrlParameter" value="spring-security-redirect"/>
</beans:bean>

【讨论】:

我不想去那里登录之后,我想去登录表单,并附加该 URL 作为参数。【参考方案2】:

重定向到登录表单由AuthenticationEntryPoint 执行。对于 Spring Security 3.0+,这通常是 LoginUrlAuthenticationEntryPoint 的实例。 2.0对应的类是AuthenticationProcessingFilterEntryPoint

入口点由ExceptionTranslationFilter 调用,它还负责缓存请求。因此,您可以编写一个自定义的AuthenticationEntryPoint,它会重定向到附加参数(包含当前请求 URI)的登录页面 URL。代码应该与标准实现几乎相同。

您可以使用 http 命名空间元素上的 entry-point-ref 属性将自定义 AuthenticationEntryPoint 注入命名空间配置。如果您使用的是普通 bean,则可以将其注入 ExceptionTranslationFilter

【讨论】:

这听起来像是正确的答案,我正朝着这条路前进,但似乎有些东西对我不起作用。听起来我需要再试一次。【参考方案3】:

如果您使用自己的登录页面并希望使用 Raghuram 建议的方法,您还必须在表单中放置一个带有 targetUrlParameter 名称的隐藏字段。

对于您的示例(即使用 *return_to* URL 参数),它将类似于:

<input type="hidden" name="spring-security-redirect" value="<c:out value="$param.return_to" escapeXml="true" />" />

【讨论】:

以上是关于使spring security在登录页面的查询字符串中添加返回url的主要内容,如果未能解决你的问题,请参考以下文章

如何使初始登陆页面不是spring security的登录表单?

如何使 Grails Spring Security 2.0 中的登录/页面成为初始屏幕?

在 Spring Security 中添加新用户

页面获取Spring Security登录用户

Spring mvc / security:从spring security中排除登录页面

由于重定向循环,Grails Spring Security 无法显示登录页面