Spring安全性3.1.自定义带有url参数的authentication-failure-url



我用谷歌搜索了几个小时,尝试了很多变体,但没有任何成功。请帮我找一个解决办法。

版本:Spring 3.1

我有登录页面。登录页面取决于URL参数:

/login?code=client1

/login?code=client2

所以client1和client2有不同的登录页面。

security.xml:

<sec:form-login login-page="/login" default-target-url="/start" authentication-failure-url="/login"/>

所以如果用户做了错误的认证,我显示他/登录页面…但关键是我必须显示登录页面与相应的代码参数。

我该怎么办?你有例子吗?

谢谢你的预先安排。

UPDATE # 1:

创建了FailureHandler类:

public class GRSAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) {
}
}

我应该在里面写什么来重定向到需要的URL?请告诉我更多的细节。

非常感谢!

您可以使用SimpleUrlAuthenticationFailureHandler并实现一个不同的RedirectStrategy,它重定向到配置的URL,并将原始查询字符串添加到重定向的URL。

public class QueryStringPropagateRedirectStrategy extends DefaultRedirectStrategy {
    public void sendRedirect(HttpServletRequest request,
            HttpServletResponse response, String url) throws IOException {
        String urlWithOriginalQueryString = url + "?" + request.getQueryString();
        super.sendRedirect(request, response, urlWithOriginalQueryString );
    }
}


认证失败处理程序配置

<bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
    <property name="redirectStrategy" ref="queryStringPropagateRedirectStrategy" />
    <property name="defaultFailureUrl" value="/login" />
</bean>
<bean id="queryStringPropagateRedirectStrategy" class="...QueryStringPropagateRedirectStrategy" />

最新更新