5

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

春季版本:春季 3.1

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

/login?code=client1

或者

/login?code=client2

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

安全.xml:

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

因此,如果用户进行了错误的身份验证,我会向他显示 /login 页面......但重点是我必须显示带有相应代码参数的登录页面。

我应该怎么办?请问你有例子吗?

非常感谢提前。

更新#1:

我创建了 FailureHandler 类:

public class GRSAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler implements AuthenticationFailureHandler {

@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) {

}

}

我应该在里面写什么来重定向到所需的 URL?请如果你能给我更多的细节。

非常感谢!

4

1 回答 1

7

您可以使用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" />
于 2013-06-19T19:25:35.003 回答